从字符串转换为动态类型?

时间:2014-08-06 17:10:58

标签: java

我正在尝试从csv文件动态创建对象。我已经到了这个部分:

假设我有这门课程:

package com.example
public TestClass {
    public int hi = 0;
    public String ho = "ho";
}

我也有这个csv:

hi,ho
1,"hello"

在下面的代码中,classIdentifier是类名的字符串(即" com.example.TestClass"),maps是存储从csv文件读取的数据的HashMap。

    Class<T> c = (Class<T>) classIdentifier.getClass();
    Set<String> keys = maps.keySet(); 
    for(String key : keys) {
        System.out.println(classIdentifier, c.getDeclaredField(key).getType());
        System.out.println(maps.get(key));
        c.getDeclaredField(key).set(classIdentifier, c.getDeclaredField(key).getType().cast(maps.get(key)));
    }

以上代码将打印出预期值: INT 1

但是这会在演员表中抛出以下错误: java.lang.ClassCastException:无法将java.lang.String强制转换为int

虽然在给定的例子中,hi是int而ho是字符串,但我确实希望扩展此代码的用法以便能够使用任何类型进行转换。这意味着我对这些领域没有先验知识。键入,直到我使用c.getDeclaredField(key).getType()(这就是我的动态意思)。

我只是想知道如何解决它?

0 个答案:

没有答案