有一个普通Java Bean,它的属性域有各种类型(基本类型、类、枚举):
public class Bean {    private int a;
    private String b;
    private Double c;
    private TypeEnum d;
    ...
    // setters and getters
}枚举TypeEnum的定义如下:
public enum TypeEnum {    enum1, enum2, enum3;
}现在再写一个类,它有一个方法是用反射机制给上面的Bean的每个属性赋值:
public class Interpretor {    ...    public static void interpret() {        ...        for ( Field field : Bean.class.getDeclaredFields() ) {             // 得到属性域的声名类型
             Class<?> clazz = field.getType();
             Bean bean = new Bean();             // 这里value是一个字符串。我的意图是把字符串转化为和Bean中属性域声名类型相同的类型后赋值给Bean的属性域
             // 举个例子:若value == "123",Bean中的一个属性声名类型为Integer,那么,我把一个new Integer(123)赋值给Bean的这个属性
             // 若value == "enum1",Bean中的一个属性声名类型为TypeEnum,那么,我把一个TypeEnum.enum1赋值给Bean的这个属性
             // 由于枚举类型不能用构造函数产生,所以typeof函数作了一个重载(其实我不是很肯定这是重载)
             field.set( bean, typeof( clazz, value ) );        }    }    // 这个typeof处理基本类型和除枚举之外的类
    public static <T> T typeof( Class<T> clazz, value ) {        try {             return (T) clazz.getConstructor( String.class ).newInstance( value );        } catch ( ... ) {
            ...
        }
    }    // 这个typeof只处理枚举
    // 或许这个原型声名改为public static <T extends Enum<?>> T typeof( Class<T> clazz, String value )会更好一些?能解决问题就行
    public static <T extends Enum<T>> T typeof( Class<T> clazz, value ) {         return (T) Enum.valueOf( clazz, value );    }}
    按我的想法,枚举类型应该由第二个typeof函数处理的,但实际上,程序选择了第一个typeof函数。也许在Class<?> clazz = field.getType()时,clazz已经不是枚举类型了。但clazz.isEnum()返回的却是true    我的问题是这样的:
        在不影响功能的情况下,怎么实现用反射机制对枚举类型的属性域赋值?(这里的枚举类型不只TypeEnum一种,否则我也不选择反射了)