1 package prefuse.util; 2 3 8 public class TypeLib { 9 10 private TypeLib() { 11 } 13 14 16 25 public static boolean typeCheck(Class type, Object instance) { 26 return type.isAssignableFrom(instance.getClass()) || 27 isWrapperInstance(type, instance); 28 } 29 30 40 public static Class getSharedType(Object o1, Object o2) { 41 return getSharedType(o1.getClass(), o2.getClass()); 42 } 43 44 54 public static Class getSharedType(Class type1, Class type2) { 55 if ( type1 == type2 ) { 56 return type1; 57 } else if ( type1.isAssignableFrom(type2) ) { 58 return type1; 59 } else if ( type2.isAssignableFrom(type1) ) { 60 return type2; 61 } else { 62 return null; 63 } 64 } 65 66 75 public static boolean isWrapperInstance(Class type, Object instance) { 76 if ( !type.isPrimitive() ) 77 throw new IllegalArgumentException ("Input type must be a primitive"); 78 79 if ( int.class == type && instance instanceof Integer ) { 80 return true; 81 } else if ( long.class == type && instance instanceof Long ) { 82 return true; 83 } else if ( float.class == type && instance instanceof Float ) { 84 return true; 85 } else if ( double.class == type && instance instanceof Double ) { 86 return true; 87 } else if ( boolean.class == type && instance instanceof Boolean ) { 88 return true; 89 } else if ( short.class == type && instance instanceof Short ) { 90 return true; 91 } else if ( byte.class == type && instance instanceof Byte ) { 92 return true; 93 } else if ( char.class == type && instance instanceof Character ) { 94 return true; 95 } else { 96 return false; 97 } 98 } 99 100 107 public static Class getPrimitiveType(Class type) { 108 if ( Integer .class.equals(type) || type == int.class ) { 109 return int.class; 110 } else if ( Long .class.equals(type) || type == long.class ) { 111 return long.class; 112 } else if ( Float .class.equals(type) || type == float.class ) { 113 return float.class; 114 } else if ( Double .class.equals(type) || type == double.class ) { 115 return double.class; 116 } else if ( Byte .class.equals(type) || type == byte.class ) { 117 return byte.class; 118 } else if ( Short .class.equals(type) || type == short.class ) { 119 return short.class; 120 } else { 121 throw new IllegalArgumentException ( 122 "Input class must be a numeric type"); 123 } 124 } 125 126 132 public static Class getWrapperType(Class type) { 133 if ( !type.isPrimitive() ) { 134 return type; 135 } else if ( int.class == type ) { 136 return Integer .class; 137 } else if ( long.class == type ) { 138 return Long .class; 139 } else if ( float.class == type ) { 140 return Float .class; 141 } else if ( double.class == type ) { 142 return Double .class; 143 } else if ( boolean.class == type ) { 144 return Boolean .class; 145 } else if ( short.class == type ) { 146 return Short .class; 147 } else if ( char.class == type ) { 148 return Character .class; 149 } else if ( byte.class == type ) { 150 return Byte .class; 151 } else if ( short.class == type ) { 152 return Short .class; 153 } else { 154 throw new IllegalArgumentException (); 155 } 156 } 157 158 164 public static boolean isIntegerType(Class type) { 165 return ( type == byte.class || type == short.class || 166 type == int.class || type == long.class); 167 } 168 169 175 public static boolean isNumericType(Class type) { 176 return ( type == byte.class || type == short.class || 177 type == int.class || type == long.class || 178 type == double.class || type == float.class ); 179 } 180 181 189 public static Class getNumericType(Class c1, Class c2) { 190 if ( !isNumericType(c1) || !isNumericType(c2) ) { 191 throw new IllegalArgumentException ( 192 "Input types must be primitive number types"); 193 } 194 if ( c1 == double.class || c2 == double.class ) { 195 return double.class; 196 } else if ( c1 == float.class || c1 == float.class ) { 197 return float.class; 198 } else if ( c1 == long.class || c2 == long.class ) { 199 return long.class; 200 } else { 201 return int.class; 202 } 203 } 204 205 } | Popular Tags |