【发布时间】:2020-01-06 10:38:31
【问题描述】:
我有一个class Message 和一个消息列表:List<Message> messages
我不能List<Object> objects = messages;我知道。
但我可以做到这一点而不会出现编译错误:
Object object = messages;
List<Object> myList = (List<Object>) object;
myList.add(new Object());
然后我的messages 列表可以包含任何对象,而不仅仅是 Message 对象。这是为什么呢?
【问题讨论】:
-
它是包含任何对象的 myList 列表。消息与它不再有任何关系。
-
当然,但是 myList 和 messages 引用了堆上的同一个对象(List
的一个实例)。在那种情况下,为什么禁止“List -
@robingood 如果他将
List<Message>转换为List<Object>,它仍然是同一个对象。 -
Java 泛型可以帮助您避免错误。当你在他们周围施放时,你绕过了防止这种情况发生的检查。
-
没有编译错误,是的。但并非没有编译器警告。打开所有编译器警告,并注意它们。编译器会告诉你你的演员表是不安全的。 (您甚至可以使用
-Werror让编译器将它们视为错误。)
标签: java generics inheritance collections