gpt4 book ai didi

Java 方法声明返回带有引用的列表泛型

转载 作者:行者123 更新时间:2023-11-30 06:05:54 25 4
gpt4 key购买 nike

你能解释一下为什么第一个不起作用吗?

import java.util.ArrayList;
import java.util.List;

public class MyClass {

private <T extends Object> List<Class<T>> getList1() {
return new ArrayList<>();
}

private <T extends Object> List<Class<T>> getList2(Class<T> cls) {
List<Class<T>> list = new ArrayList<>();
list.add(cls);
return list;
}

private List<Class<? extends Object>> getList3() {
return new ArrayList<>();
}

public static void main(String[] args) {
MyClass myClass = new MyClass();
// 1. Not OK - The method add(Class<Object>) in the type List<Class<Object>> is not applicable for the arguments (Class<String>)
myClass.getList1().add(String.class);
// 2. OK
myClass.getList2(String.class);
// 3. OK
myClass.getList3().add(String.class);
}

}

我认为 getList1() 返回的是从 Object 扩展的类的 List,而 String 是其中之一?

不,这不是一个重复的问题(至少不是链接的问题)。如果我真的定义了一个对象列表,我当然不希望它接受一个字符串列表。但这里我接受一个对象列表加上那些从对象扩展的列表,所以问题是为什么它在第一种情况下不接受字符串。

最佳答案

您可以像这样调用该方法:

myClass.<String>getList1().add(String.class);

编译器需要以某种方式知道你的 T 是什么应该是( <String> 称为 type witness )。


  • 使用您的方法 getList2(String.class)您可以通过传入参数来指定它。
  • 使用您的方法 getList3()声明本身使用通配符 ( ? ),因此您不必指定 T ,但您的列表不会是强类型的(它将接受扩展 Object 的每个类)。

关于Java 方法声明返回带有引用的列表泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45274612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com