我正在尝试创建一个程序来创建它自己的小数据库类型的东西(因为我想要一些额外的东西来做它)并且我遇到了一个小小的不幸事件。当我尝试设置表值的值时,我显然必须检查它是否是正确的类型。在我的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
代表String
或Integer
。感谢您的时间和帮助。
答案 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);
}
}