2014-10-16 51 views
0

我正在构建一个数据驱动的测试系统。我之前用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并将工厂类映射到实际的类对象。这不会很困难,但不像使用该属性那么简单。

谢谢

回答

0

你不能这样做,你希望,我害怕。泛型只是编译时的事情,并且不能在运行时以这种方式使用,因为type erasure

您可以做的最好的方法是获得一些list_foo属性,并将这些属性显式映射到代码中的List<Foo>等等。但是你不能通过反思去做。

+0

是的,我很害怕这个。哦,我会创建一个工厂。谢谢 – scphantm 2014-10-16 20:46:35