Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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泛型put-get规则_Java_Generics_Collections - Fatal编程技术网

Java泛型put-get规则

Java泛型put-get规则,java,generics,collections,Java,Generics,Collections,我在java中使用泛型时遇到了put-get规则,该规则规定不能将元素添加到 <? extends something> ANavigableSetANavigableSet考虑以下示例,对您的代码稍作修改: NavigableSet<String> stringSet = new TreeSet<>(); NavigableSet<? super String> set = stringSet; set.add(new Object());

我在java中使用泛型时遇到了put-get规则,该规则规定不能将元素添加到

<? extends something>

A
NavigableSetA
NavigableSet考虑以下示例,对您的代码稍作修改:

NavigableSet<String> stringSet = new TreeSet<>();
NavigableSet<? super String> set = stringSet;
set.add(new Object());
由于编译器不知道
set
的值是否由另一个具有更严格类型约束的变量引用,因此它不允许在参数类型大于下限的情况下调用使用者方法


换句话说:编译器只知道
set
可以包含
String
s;它不知道它是否也可以包含
对象。

考虑一下这个示例,对您的代码进行一点修改:

NavigableSet<String> stringSet = new TreeSet<>();
NavigableSet<? super String> set = stringSet;
set.add(new Object());
由于编译器不知道
set
的值是否由另一个具有更严格类型约束的变量引用,因此它不允许在参数类型大于下限的情况下调用使用者方法


换句话说:编译器只知道
set
可以包含
String
s;它不知道它是否也可以包含
对象

(或文本null。您可以始终添加null,至少从类型角度来看是这样;但在运行时可能会失败)(或文本null。您可以始终添加null,至少从类型角度来看是这样;但在运行时可能会失败)
NavigableSet<String> stringSet = new TreeSet<>();
NavigableSet<? super String> set = stringSet;
set.add(new Object());
String s = stringSet.iterator().next();