我有一个类(我们称它为Vehicle)和一个子类(Car)。两者的实例都存储在一个ArrayList中。Car的方法doStuff()不是从车辆继承的。我想对ArrayList中的每辆车都做doStuff()。这是我想到的最简单的解决方案:
vehicleList = new ArrayList<Vehicle>();
roster.add(new Vehicle());
roster.add(new Car());
for (Vehicle v: vehicleList){
if (v instanceof Car){
((Car) v).doStuff();
}
}
但是我觉得有一种更简单的方法可以做到这一点。因此,在此先感谢您能提供一个更简单的解决方案。
如果您的列表被声明为List<Vehicle>
,那么这就是正确的方法-您必须先检查单个项目是否为Truck
,或Car
或其他内容,才能知道。
如果Vehicle
有必要使用该方法,则可以在该方法中声明该方法,doStuff
并且默认情况下不执行任何操作,然后在中放置一个真正的实现Car
。不过,这通常是不良设计的标志。
另一种选择是获取一个List<Car>
替代项,因此您不必检查列表中每个项的类型。您也可以将它doStuff
作为接口的一部分放置CanDoStuff
,因此不必进行Car
检查-通过这种方式,您也可以轻松地将其应用于其他类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句