我已经实现了具有以下签名的java方法:
public <T> T getItemValue(String itemName, Class<T> itemType) {
...
}
这允许客户端以以下方式调用方法以获取例如String或Integer类型的值:
String s = itemCol.getItemValue("_name", String.class);
int i = itemCol.getItemValue("_count", Integer.class);
新的微配置文件Config 1.3 API的Config interface也使用了这种方法签名。
我的问题是-如何或是否可以使用类型为List<String>
的类型列表来调用该方法,以获取例如String对象列表。
我无法提出客户电话。我尝试过这样的事情:
List<String> list = itemCol.getItemValue("_count", List<String.class>);
但这似乎不是正确的语法。
已编辑
:由于下面的回答,我决定添加一个单独的方法来获取特定类型的列表。
public <T> List<T> getItemValueList(String itemName, Class<T> itemType) {
...
}
使用此附加方法签名,客户可以决定天气以获取单个值或特定类型的列表。
答案 0 :(得分:5)
Type参数被删除,它们在运行时不存在。在运行时没有List<String>
这样的东西,只有List
。
因此,表达List<String>
的反射代理的正确方法是…。您只能为List
表示反射型代理,就像对其他任何类:List.class
一样。
答案 1 :(得分:4)
不是List<String.class>
,不是。您需要使用TypeToken来获得这种通用信息。您还需要更改代码以使用Type
而不是Class
。