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 }