我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).
能否给我一个人解释如何使用佩奇之间解决困惑extends和super?
我有一个List,声明如下:
List<? extends Number> foo3 = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
我试图将3添加到foo3.但是我收到如下错误消息:
The method add(capture#1-of ? extends Number) in the type List<capture#1-of ?
extends Number> is not applicable for the arguments (ExtendsNumber)
Run Code Online (Sandbox Code Playgroud) 我转移到一台新机器,它有最新的Sun Java编译器,并注意到现有Java 6代码中的一些警告.Eclipse IDE,建议我使用以下命令注释赋值:
@SuppressWarnings("rawtypes")
Run Code Online (Sandbox Code Playgroud)
例如:
class Foo<T> {
...
}
...
@SuppressWarnings("rawtypes")
Foo foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
当我使用较旧的编译器(JDK 1.6.0_20)回到机器时,我注意到这个较旧的编译器现在警告抑制"rawtypes"警告,声称这种抑制不受支持并建议用@SuppressWarnings替换它( "未登记").此外,有些地方默认情况下,最新的编译器让我把"unchecked"和"rawtypes"都放在一起 - 用旧编译器编译代码再现相同的警告.
如何强制两者之间的向后/向前兼容性,以便编译器都不会产生警告?
java compiler-construction warnings raw-types suppress-warnings