Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中定义类型的通用列表?_Java_Generics - Fatal编程技术网

如何在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

我实现了一个具有以下签名的java方法:

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) {
        ...
}