请考虑以下代码:
class Test {
public static void main(String[] args) {
new C(new ArrayList<Object>());
}
static class C<T> {
public C(final List<String> b) {
}
}
}
在javac 1.6.0_30下,此代码编译时没有错误(尽管原始类型有警告)。看来,如果以原始方式使用类型,则关闭该类型的所有泛型类型检查。这似乎是编译器通过未经检查的调用的含义,但它似乎很奇怪,它禁用所有通用检查而不仅仅是该类中的泛型。根据JLS或仅仅是编译器错误,这是正确的行为吗?