Java 枚举值表示 java.lang class
Java Enum Value represent java.lang class
我正在尝试创建一个程序来创建它自己的小数据库类型的东西(只是因为我想为此做一些额外的事情)并且我 运行 遇到了一个小事故。当我尝试为 table 的值设置值时,我显然必须检查它是否是正确的类型。在我的 Value
class 中,我有 setValue
函数:
public void setValue(Object value){
ValueType t = getColumn().getType();
if(value instanceof t){
// Is the correct type.
}
this.value = value;
}
其中ValueType
是可用值类型的Enum。这是 class:
public enum ValueType {
STRING, INTEGER, BOOLEAN, FLOAT
}
直到行:
if(value instanceof t){
IntellIJ Idea 说 t
是一个未知数 class。所以我试图让 t
代表 String
或 Integer
。感谢您的宝贵时间和帮助。
您可以将以下方法添加到您的枚举中:
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);
}
}
我正在尝试创建一个程序来创建它自己的小数据库类型的东西(只是因为我想为此做一些额外的事情)并且我 运行 遇到了一个小事故。当我尝试为 table 的值设置值时,我显然必须检查它是否是正确的类型。在我的 Value
class 中,我有 setValue
函数:
public void setValue(Object value){
ValueType t = getColumn().getType();
if(value instanceof t){
// Is the correct type.
}
this.value = value;
}
其中ValueType
是可用值类型的Enum。这是 class:
public enum ValueType {
STRING, INTEGER, BOOLEAN, FLOAT
}
直到行:
if(value instanceof t){
IntellIJ Idea 说 t
是一个未知数 class。所以我试图让 t
代表 String
或 Integer
。感谢您的宝贵时间和帮助。
您可以将以下方法添加到您的枚举中:
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);
}
}