View Javadoc
1   package org.pojomatic.internal;
2   
3   import java.util.Arrays;
4   import java.util.Collections;
5   import java.util.List;
6   import java.util.Objects;
7   
8   public enum BaseType implements Type {
9     BOOLEAN(boolean.class, false, true),
10    BYTE(byte.class, (byte) 0, (byte) 1, (byte) -1),
11    CHAR(char.class, 'a', '\u0000', '\u009a', '\u1234') {
12      @Override
13      public String toString(Object value) {
14        switch ((char) value) {
15          case 'a': return "'a'";
16          case '\u0000': return "'\\u0000'";
17          case '\u009a': return "'\\u009a'";
18          case '\u1234': return "'" + '\u1234' + "'";
19          default:
20            throw new IllegalArgumentException("unexpected character " + value);
21        }
22      }
23    },
24    SHORT(short.class, (short) 0, (short) -1, (short) 1),
25    INT(int.class, -12314, 0, 2352362),
26    LONG(long.class, 0L, -23413513515L, 2L << 16 + 5L),
27    FLOAT(float.class, 0f, 123151f, -151f),
28    DOUBLE(double.class, 0.0, -141.2, 12351351.26),
29    OBJECT(Object.class, null, "", "hello", new String("hello"), 29),
30    ;
31  
32    private final Class<?> clazz;
33    private final List<Object> sampleValues;
34  
35    @SafeVarargs
36    private <T> BaseType(Class<T> clazz, T... values) {
37      this.clazz = clazz;
38      this.sampleValues = Collections.unmodifiableList(Arrays.<Object>asList(values));
39    }
40  
41    @Override
42    public Class<?> getClazz() {
43      return clazz;
44    }
45  
46    @Override
47    public List<Object> getSampleValues() {
48      return sampleValues;
49    }
50  
51    @Override
52    public int hashCode(Object value) {
53      return Objects.hashCode(value);
54    }
55  
56    @Override
57    public int deepHashCode(Object value) {
58      return hashCode(value);
59    }
60  
61    @Override
62    public String toString(Object value) {
63      return Objects.toString(value);
64    }
65  
66    @Override
67    public String deepToString(Object value) {
68      return toString(value);
69    }
70  
71    @Override
72    public int arrayDepth() {
73      return 0;
74    }
75  
76  }