Vehicle
对于一个类,我被分配编写代码以使用 ObjectInputStream ( in
)读取该类的对象。这些对象存储在一个名为 的 ArrayList 中orders
。
SSCE:
// Read all orders
Object obj = in.readObject();
orders = (ArrayList<Vehicle>) obj;
但是,编译器抱怨:
MacBook:Homework Brienna$ javac Orders.java -Xlint:unchecked
Orders.java:152: warning: [unchecked] unchecked cast
orders = (ArrayList<Vehicle>) in.readObject();
^
required: ArrayList<Vehicle>
found: Object
1 warning
我总是尝试改进我的代码,而不是忽略或抑制警告。在这种情况下,我想出了一个解决方案,但我试图了解它为什么起作用,以及是否有更好的解决方案。
此更新停止警告:
// Read all orders, casting each order individually
Object obj = in.readObject();
ArrayList ar = (ArrayList) obj;
for (Object x : ar) {
orders.add((Vehicle) x);
}
根据我从我一直在阅读的内容中了解到的内容,它可以工作,因为(ArrayList<Vehicle>) obj
如果不是所有元素都是Vehicle
. 我很困惑 - 非车辆对象可以添加到 ArrayList 即使其类型参数已指定为Vehicle
?此外,是否有更好的解决方案,例如使用instanceof
?