protected ReflectEnum(Class<?> enumClass){ this.reflectiveClass = ReflectClass.of(enumClass); this.initialize(); }
public static ReflectEnum of(Class<?> enumType){ Args.notNull(enumType,"enumType"); Args.assertTrue(enumType.isEnum(),"'" + enumType.getName() + "' is not an enum type"); ReflectEnum reflectEnum = cache.get(enumType); if(null == reflectEnum){ reflectEnum = new ReflectEnum(enumType); cache.put(enumType, reflectEnum); } return reflectEnum; }
public static String[] getValues(Class<?> enumType) { ReflectEnum reflectEnum = ReflectEnum.of(enumType); String[] values = new String[enumType.getEnumConstants().length]; for(int i=0;i<values.length;i++) { Object e = enumType.getEnumConstants()[i]; String v = reflectEnum.isValued() ? String.valueOf(reflectEnum.getValue(e)) : e.toString(); values[i] = v; } return values; }
public static <E extends Enum<?>> E valueOrNameOf(Class<E> enumType,Object valueOrName) throws IllegalStateException{ if(Objects2.isEmpty(valueOrName)){ return null; } String stringValue = valueOrName.toString(); ReflectEnum reflectEnum = ReflectEnum.of(enumType); if(reflectEnum.isValued()){ for(E e : enumType.getEnumConstants()){ if(reflectEnum.getValue(e).toString().equals(stringValue)){ return e; } } } for(E e : enumType.getEnumConstants()){ if(e.toString().equals(stringValue)){ return e; } } throw new IllegalStateException("Invalid enum value '" + valueOrName + "' of type '" + enumType.getName() + "'"); }
public static <E extends Enum<?>> E valueOf(Class<E> enumType,Object value) throws IllegalStateException{ if(null == value){ return null; } String stringValue = value.toString(); ReflectEnum reflectEnum = ReflectEnum.of(enumType); if(reflectEnum.isValued()){ for(E e : enumType.getEnumConstants()){ if(reflectEnum.getValue(e).toString().equals(stringValue)){ return e; } } }else{ if(stringValue.equals("")){ return null; } for(E e : enumType.getEnumConstants()){ if(e.toString().equals(stringValue)){ return e; } } } throw new IllegalStateException("Invalid enum value '" + value + "' of type '" + enumType.getName() + "'"); }