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 }