我的程序将序列化一个名为Configuration的类的实例。 首先,从配置文本文件中获取属性的键值,如:
SECONDS=60
NAME=JINGGLE
LIFE=true
因此,在序列化之前,我必须获取此键值并转换为实例:
for(Entry<String, String> entry : attributes.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
Field field = c.getDeclaredField(key);
field.setAccessible(true);
try {
//Get the data type and transform the string to this type
Class<?> type = field.getType();
Object atribute ;
atribute = type.getConstructor(String.class).newInstance(value);
field.set(o, atribute);
例如,这可以使用字符串和整数,但对于原始值或布尔值没有... 我怎么能做例如使用反射的布尔值并使用像true或false的字符串获取valor?或者如何用原始值int。
答案 0 :(得分:0)
原始类型不能通过使用Field的反射很好地工作,因为没有原语的构造函数。
如果您知道对于给定字段所期望的基本类型,则使用解析的类版本,然后在解析后(显式或隐式)转换为基元。
您需要按名称执行此操作,并具有预期字符串和类型的查找表(或检查输入字符串的if / elseif块)。 例如:
if (key.toUpperCase().equals("SECONDS"))
{
int seconds = Integer.parseInt(value);
//set field value (using an overload with primitives or explicity
}