Java 接受泛型集中的子类型

Java 接受泛型集中的子类型,java,generics,Java,Generics,我试图找到一种方法,返回一个泛型集,它将接受子类型。下面的代码返回一个基本上不可能的Set 如果该方法实际返回一个哈希集? 您刚刚在一组Cs中添加了一个B 检查typesafety时,将忽略方法的内容(return语句) 如果要执行此操作,只需返回一个普通的哈希集,这基本上是不可能的 如果该方法实际返回一个哈希集? 您刚刚在一组Cs中添加了一个B 检查typesafety时,将忽略方法的内容(return语句) 如果要执行此操作,只需返回一个普通的HashSet问题的要点是,您可以以这种方式使用


我试图找到一种方法,返回一个泛型集,它将接受子类型。下面的代码返回一个基本上不可能的
Set

如果该方法实际返回一个
哈希集

您刚刚在一组
C
s中添加了一个
B

检查typesafety时,将忽略方法的内容(
return
语句)


如果要执行此操作,只需返回一个普通的
哈希集

,这基本上是不可能的

如果该方法实际返回一个
哈希集

您刚刚在一组
C
s中添加了一个
B

检查typesafety时,将忽略方法的内容(
return
语句)


如果要执行此操作,只需返回一个普通的
HashSet

问题的要点是,您可以以这种方式使用通配符来迭代扩展公共父对象并执行读取操作的不同对象,但如果要写入集合,则这不起作用


原因是编译器无法确定将从getSet()方法返回的集合的运行时类型。它不会解析您编写的代码并试图做出决定。

问题的要点是,您可以以这种方式使用通配符来迭代扩展公共父对象并执行读取操作的不同对象,但如果您想写入集合,这是行不通的

原因是编译器无法确定将从getSet()方法返回的集合的运行时类型。它不会解析您编写的代码并试图做出决定

通用通配符教程说明不能将B添加到集合中
通用通配符教程指出,不能将B添加到集合中。我认为,将
B
添加到
C
s集合中会引发错误,因为
B
不会扩展
C
。这可能是不可能的,因为它不能在编译时知道。你说得对,我没有考虑过。老实说,这是我遇到的问题的一个浓缩版本。我会找到另一种方法。我认为这个想法是将
B
添加到一组
C
s会抛出一个错误,因为
B
不会扩展
C
。这可能是不可能的,因为它不能在编译时知道。你说得对,我没有考虑过。老实说,这是我遇到的问题的一个浓缩版本。我会找到另一种方法的。每个人的回答都一样:)嗯。每个人的答案都是一样的:)