如何确定ArrayList迭代器接下来将返回的对象类型?

Dan*_*Dan 9 java iterator arraylist

我有一个ArrayList,我正在使用迭代器来运行它.我需要找出下一个类型的对象:

Iterator vehicleIterator = vehicleArrayList.iterator();

while(vehicleIterator.hasNext())
{
     //How do I find the type of object in the arraylist at this point
     // for example, is it a car, bus etc... 
}
Run Code Online (Sandbox Code Playgroud)

谢谢

sin*_*pop 9

Object o = vehicleIterator.next();
if (o instanceof Car) // Is a car
if (o instanceof Bus) // ...
Run Code Online (Sandbox Code Playgroud)


Tom*_*ine 9

首先,在那里获得一些泛型.它们自2004年以来一直在Java中.即使是引入它们的Java SE版本也已完成其服务终止期限.

(正如@finnw指出的那样,我忘记了糟糕的旧Java ME.如果你必须使用Java ME,那么你将需要避开泛型并转换(但不instanceof经常),直到它(包括已部署的设备)进入2004年.)

使用instanceof和铸造往往表明设计不佳.最好将带有接口的对象放入列表中,客户端代码可以在没有测试的情况下使用该接口,以及映射到列表的每个"真实"目标的不同行为的实现."计算机科学中的每一个问题都可以通过添加另一个间接层来解决"["......除了太多的间接层次."]


Bil*_*ard 5

一种方法是使用该getClass()方法.

Object obj = vehicleIterator.next();
Class type = obj.getClass();  
System.out.println("The type is: " + type.getName());
Run Code Online (Sandbox Code Playgroud)

但是,如果您明确检查类类型,那么使用多态或其他OO原则编写代码几乎总是更好的方法.instanceof如果添加其他类型的汽车,则必须更改像这样或使用类型的代码.

无需您在使用类型做什么的更多信息,我建议你有一个基本类型VehicleCar,Bus等全部继承.为您的车辆提供他们需要的方法(覆盖您需要的方法),然后在循环中调用这些方法.