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

我已经实现了一个具有以下签名的 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);

新的 microprofile Config 1.3 API的Config 接口也使用了这种方法签名。


我的问题是如何 - 或者是否 - 我可以使用类型列表的类型调用该方法,List<String>例如获取字符串对象列表。我无法制定客户电话。我试过这样的事情:


List<String> list = itemCol.getItemValue("_count", List<String.class>);

但这似乎不是正确的语法。


编辑:


由于下面的回复,我决定添加一个单独的方法来获取特定类型的列表。


public <T> List<T> getItemValueList(String itemName, Class<T> itemType) {

        ...

}

通过这个额外的方法签名,客户端可以决定天气来获取单个值或特定类型的列表。


浮云间
浏览 197回答 2
2回答

偶然的你

类型参数被擦除,它们在运行时不存在。没有List<String>运行时这样的东西,只有List.所以,表达反射代理的正确方法List<String>是……你不能。您只能为 表达反射代理List,就像对任何其他类所做的一样:List.class.

动漫人物

不List<String.class>,不。您需要使用TypeToken来获取此类通用信息。您还需要更改您的代码以使用Type而不是Class.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java