如何在java中定义类型的通用列表?
我实现了一个具有以下签名的java方法:如何在java中定义类型的通用列表?,java,generics,Java,Generics,我实现了一个具有以下签名的java方法: public <T> T getItemValue(String itemName, Class<T> itemType) { ... } 这种方法签名也被新的microprofile Config 1.3 API使用 我的问题是如何——或者如果——我可以使用类型列表(如List)调用该方法,以获取字符串对象列表。 我无法制定客户电话。我试过这样的方法: List<String> list = itemCol.ge
public <T> T getItemValue(String itemName, Class<T> itemType) {
...
}
这种方法签名也被新的microprofile Config 1.3 API使用
我的问题是如何——或者如果——我可以使用类型列表(如List)调用该方法,以获取字符串对象列表。
我无法制定客户电话。我试过这样的方法:
List<String> list = itemCol.getItemValue("_count", List<String.class>);
但这似乎不是正确的语法
编辑:
由于下面的回答,我决定添加一个单独的方法来获取特定类型的列表
public <T> List<T> getItemValueList(String itemName, Class<T> itemType) {
...
}
通过这个附加的方法签名,客户机可以决定是否获取单个值或特定类型的列表 类型参数被擦除,它们在运行时不存在。运行时并没有列表,只有列表
所以,表示列表的反射代理的正确方法是…你不能。您只能表示列表的反射代理,与您对任何其他类的表示方式相同:List.class。不适用于列表,不适用。您需要使用来获取此类通用信息。您还需要将代码更改为使用类型而不是类。List.Class由于类型擦除而无法工作。这是正确的,只是有一个警告。Java没有List.class,只有List.class,因此存在不安全的类型转换警告。添加第二个方法(如公共列表getItemValueListString itemName,类itemType)是否是一种解决方案,它允许客户端像这样调用List slist=itemCol.GetItemValueListXtname,String.class?您觉得这个解决方案更好吗?如果您可以控制数据,您可能希望使用数组而不是列表。字符串[]。类是完全有效的,不会生成任何警告。由于列表接口对客户端代码很重要,我现在添加了一个单独的方法。见我编辑的问题。谢谢你的帮助。但是客户端代码会是什么样子呢?List List=itemCol.getItemValue\u计数,List.class??-我的实现如何知道返回的列表应该只包含字符串元素?它不能。字体被删除了。它在运行时不存在。这就是类型擦除的含义。类型已消失。感谢您的澄清。我添加了一个新的单独方法。见我编辑的问题。
public <T> List<T> getItemValueList(String itemName, Class<T> itemType) {
...
}