繁体   English   中英

参数化Class对象的Java集合的异常行为

[英]odd behavior with java collections of parameterized Class objects

使用参数化的Class对象列表,进行一些可疑的行为:

ArrayList<Class<String>> classList = new ArrayList<Class<String>>();

classList.add(Integer.class); //compile error

Class intClass = Integer.class;
classList.add(intClass); //legal apparently, as long as intClass is not parameterized

发现LinkedList的行为相同,但未尝试其他集合。 这样是有原因的吗? 还是我偶然发现了某些东西?

这将生成“未经检查的转换”警告。

Class (而不是Class<String>Class<?>Class<Object> )是原始类型。 可以将原始类型分配给参数化类型,而不会出现错误,但是会出现警告。 这种分配只是警告,因此您可以拥有仅部分生成的代码库。 另请参见JLS中有关原始类型的部分

这样做只是为了向后兼容,这是合法的,因此可以在Java 5或更高版本中编译Java 5之前编写的代码,而无需遍历和添加泛型。 由于其他原因而使用原始类型通常被认为是编程错误或至少具有较差的样式/惰性。

通过故意声明Raw类型,您就放弃了编译器帮助您进行类型安全的功能,因此您会得到警告,并再次确保您在运行时安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM