Java使用字符串和反射初始化对象

时间:2015-12-10 15:35:17

标签: java reflection

我的程序将序列化一个名为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。

1 个答案:

答案 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
}