我的程序将序列化一个名为Configuration的类的实例。首先,从配置txt文件中获取atributes的键值,如:
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);
例如,这适用于Strings和Integers,但不适用于基元值或布尔值。。。例如,我如何使用反射来实现布尔值,并用true或false这样的字符串来获取valor?或者如何使用基元值int.
基元类型通过使用Field的反射不能很好地工作,因为没有基元的构造函数。。
如果您知道给定字段的基元类型,请使用parse的类版本,然后在解析后转换为基元(显式或隐式)。
您需要按名称执行此操作,并拥有一个包含预期字符串和类型的查找表(或者一个if/elseif块来检查输入字符串)。示例:
if (key.toUpperCase().equals("SECONDS"))
{
int seconds = Integer.parseInt(value);
//set field value (using an overload with primitives or explicity
}