Java Generics初学者 - 关于类型安全声明和实例化的编译器警告

oks*_*s16 2 java generics

如果我声明并实例化如下所示的新类型安全集合,编译器将发出警告

List<String> list = new ArrayList(); // compiler warning
List<String> anotherList = new ArrayList<String>(); //this is normal and ok.
Run Code Online (Sandbox Code Playgroud)

列表对象似乎是类型安全的,因为我不能放入除String之外的任何其他对象.那么,使用这样的声明是否有任何陷阱?

Oli*_*rth 6

因为你可以这样做:

ArrayList foo = new ArrayList();
foo.add(new Integer(5));
List<String> list = foo;  // compiler warning
Run Code Online (Sandbox Code Playgroud)

但这会打破合同,List<String>只应包含Strings.这就是你得到警告的原因; 通常混合原始类型和泛型类型是不好的做法.