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



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

相关内容

  • 没有找到相关文章

最新更新