为什么Javac会抱怨与类的类型参数无关的泛型?
请按顺序阅读代码中的注释,那里的问题详细信息。
为什么会发生这种差异?
如果可能,请引用JLS。
import java.util.*;/** * Suppose I have a generic class * @param <T> with a type argument. */class Generic<T> { // Apart from using T normally, T paramMethod() { return null; } // the class' interface also contains Generic Java Collections // which are not using T, but unrelated types. List<Integer> unrelatedMethod() { return null; }}@SuppressWarnings("unused")public class Test { // If I use the class properly (with qualified type arguments) void properUsage() { Generic<String> g = new Generic<String>(); // everything works fine. String s = g.paramMethod(); List<Integer> pos = g.unrelatedMethod(); // OK error: incompatible types: List<String> := List<Integer> List<String> thisShouldErrorCompile = g.unrelatedMethod(); } // But when I use the raw type, *ALL* the generics support is gone, even the Collections'. void rawUsage() { // Using Generic<?> as the type turns fixes the warnings below. Generic g = new Generic(); // OK error: incompatible types: String := Object String s = g.paramMethod(); // WTF warning: unchecked conversion: List<Integer> := raw List List<Integer> pos = g.unrelatedMethod(); // WTF warning: unchecked conversion: List<String> := raw List List<String> thisShouldErrorCompile = g.unrelatedMethod(); }}
我最初是在IntelliJ IDEA中找到这个的,但是我猜编译器与javac兼容,因为当我用下面的代码编译上面的代码时,它给出了相同的错误/警告。
$ javac -version javac 1.7.0_05$ javac Test.java -Xlint:unchecked...$ javac Test.java -Xlint:unchecked -source 1.5 -target 1.5...
炎炎设计