用例:接受多种数据类型的用户输入,并使用Java验证后端的用户输入。
数据库:
Table 1 - Attribute Declarations
Id | Attribute Name | Attribute Data Type
-----------------------------------------
1 | My Numeric Type | Long.class
2 | My String Type | String.class
3 | Favorite Letter | Character.class
Table 2 - Attribute Assignments
Id | Fk | Attribute Value [Varchar2]
--------------------------
66 | 1 | 1234
67 | 2 | Some Word
68 | 3 | A
问题:我如何看待像#34; 1234"并将其转换为Long.class而不知道它是Long.class。我不想对一堆if-else块进行硬编码,因为如果我需要在我的数据库中添加一个新类,我需要进行代码更改以支持它。
Pseduo:
public static void validate(final Class<?> dbClass, String attrValue){
try {
dbClass.cast(attrValue);
} catch(Exception e){
LOGGER.error("ERROR: This Attribute Value is not an "
+ "instance of Class: {} | {}", dbClass.getSimpleName(), e);
throw e;
}
}
当前问题:java.lang.String是不能强制转换为Long的。我知道我可以使用Long.parseLong(string)来做到这一点,但是我可以为我的DB中定义的任何类做一个通用的方法吗?
答案 0 :(得分:0)
您可以使用Class.forName(<Attribute Data Type>);
然后调用该类的构造函数的字符串版本以创建该对象的新实例。这只适用于你使用的类有一个String构造函数(Long和String的作用 - 但是字符没有&#39; t)。
您是否需要将Attribute值存储为数据库中的varchar?你能不存储序列化的Java对象?然后,您可以直接从数据库中对其进行反序列化,并且您已经创建了正确的对象。