以下Java 7代码编译良好,没有类型安全警告:
@SuppressWarnings("javadoc")
public class Foo {
public static class Bar<T> {
public final Class<T> type;
public Bar(Class<T> type) {
this.type = type;
}
}
@SuppressWarnings("unused")
public static void main(String[] args) {
new Foo(
Arrays.asList(
new Bar<>(Object.class),
new Bar<>(String.class)));
}
public final List<Bar<?>> list;
public Foo(List<Bar<?>> list) {
this.list = list;
}
}
然而,改变
new Bar<>(Object.class),
到
new Bar<>(String.class),
无法编译并出现以下错误:
The constructor Foo(List<Foo.Bar<String>>) is undefined
使用Java 8进行编译成功。根据StackOverflow上的帖子
Java 8中有一些改进现在可以编译。
现在的问题是Java 7的最佳解决方法。
阿德里安。