Java Enum Value表示java.lang类

时间:2016-03-12 02:25:44

标签: java class enums instanceof

我正在尝试创建一个程序来创建它自己的小数据库类型的东西(因为我想要一些额外的东西来做它)并且我遇到了一个小小的不幸事件。当我尝试设置表值的值时,我显然必须检查它是否是正确的类型。在我的Value课程中,我有setValue函数:

public void setValue(Object value){
    ValueType t = getColumn().getType();
    if(value instanceof t){
        // Is the correct type.
    }
    this.value = value;
}

其中ValueType是可用值类型的枚举。这是班级:

public enum ValueType {

    STRING, INTEGER, BOOLEAN, FLOAT

}

这样直到行:

if(value instanceof t){

IntellIJ Idea说t是一个未知的类。所以我试图让t代表StringInteger。感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:2)

您可以在枚举中添加以下方法:

public enum ValueType {
    STRING, INTEGER, BOOLEAN, FLOAT;

    public boolean isInstance(Object obj) {
        // Generate a class name from enum name
        String className = "java.lang."+name().substring(0, 1)+
                               name().substring(1).toLowerCase(Locale.ENGLISH);
        try {
            // Try to resolve this class and check the supplied object type
            return Class.forName(className).isInstance(obj);
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
}

现在你可以写if(t.isInstance(value))

但是我建议将Class对象存储在枚举中,如下所示:

public enum ValueType {
    STRING(String.class), INTEGER(Integer.class), BOOLEAN(Boolean.class), FLOAT(Float.class);

    private Class<?> clazz;

    ValueType(Class<?> clazz) {
        this.clazz = clazz;
    }

    public boolean isInstance(Object obj) {
        return clazz.isInstance(obj);
    }
}