根据属性文件设置实例化通用

时间:2014-10-16 20:38:35

标签: java generics

我正在构建一个数据驱动的测试系统。我以前用XML做过这个,但是json给了我一些有趣的问题。

对于每个请求和响应类型json,我在脚本中有一个设置,我在其中指定了pojo类型。此类型被实例化为传递给jackson的类对象,以将json编组为可用的pojo。所以它是这样的:

"responseType": "java.util.List", 

最终被抽到了

Class<?> reponseType = null;
try {
    if (d.shouldPass) {
        reponseType = Class.forName(d.responseType);
    }
} catch (ClassNotFoundException e) {
    throw new RequestResponseTypeInvalid(testName);
}

我有可用于杰克逊的课程信息。我的问题是我需要这样做:

"responseType": "java.util.List<foo>", 

否则复杂的json类型会解析为hashmaps而不是pojo。我想如果我需要的话,我可以发挥创意并把一些东西从hashmap转到pojo,但我想知道是否有任何直接的方法来做到这一点。

我想另一种方法是实现一个工厂类,我可以在属性文件中说list_foo,并将工厂类映射到实际的类对象。这不会很难,但不像使用房产那么容易。

感谢

1 个答案:

答案 0 :(得分:0)

你不能以你希望的方式做到这一点,我害怕。泛型只是一个编译时的东西,因为type erasure而不能在运行时以这种方式使用。

您可以做的最好的事情是拥有一些list_foo属性,并将这些属性明确映射到List<Foo>,然后在您的代码中。但你不能通过反思来做到这一点。