Java,当类被放置在泛型对象列表中时,如何访问类的方法

wfypjpf4  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(131)

我有EquipmentProduct两个类,它们是Item类的子类,我将导入的设备和产品存储在ArrayList<Item>中,我需要从该列表中迭代访问EquipmentProduct的唯一方法。
我知道使用instanceOf通常是不好的做法,但这是我所尝试的简化版本。

for(Item i: listOfItems){
   if(i.itemType instanceOf Equipment){
      i.getEquipmentVin();
   }
}
2eafrhcq

2eafrhcq1#

如果你有一个Item列表(或一些Item),你只能调用Item方法。但是你可以将它转换为Equipment(或Product),然后调用相应的方法。要注意的是,将一个Item转换为Equipment,而在运行时它是一个Product(或其他东西),会给予你一个ClassCastException。
若要解决此问题,请首先确定您拥有的内容,然后再进行造型:

if (item instanceof Equipment) {
    Equipment e = (Equipment)item;
    e.getEquipmentVin();
} else if (item instanceof Product) {
    Product p = (Product)item;
    p.someProductMethod();
}
c7rzv4ha

c7rzv4ha2#

您需要强制转换才能从Equipment类调用方法。或者,您可以对instanceof使用模式匹配。但请注意,这可能是设计不当的症状。

if (i instanceof Equipment e) {
    e.getEquipmentVin();
} else if (i instanceof Product p) {
    p.someProductMethod();
}

相关问题