如何在Java中定义类型的通用列表?

时间:2018-08-20 20:05:56

标签: java generics

我已经实现了具有以下签名的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) {
        ...
}

使用此附加方法签名,客户可以决定天气以获取单个值或特定类型的列表。

2 个答案:

答案 0 :(得分:5)

Type参数被删除,它们在运行时不存在。在运行时没有List<String>这样的东西,只有List

因此,表达List<String>的反射代理的正确方法是…。您只能为List表示反射型代理,就像对其他任何类:List.class一样。

答案 1 :(得分:4)

不是List<String.class>,不是。您需要使用TypeToken来获得这种通用信息。您还需要更改代码以使用Type而不是Class