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)
谢谢
Object o = vehicleIterator.next();
if (o instanceof Car) // Is a car
if (o instanceof Bus) // ...
Run Code Online (Sandbox Code Playgroud)
首先,在那里获得一些泛型.它们自2004年以来一直在Java中.即使是引入它们的Java SE版本也已完成其服务终止期限.
(正如@finnw指出的那样,我忘记了糟糕的旧Java ME.如果你必须使用Java ME,那么你将需要避开泛型并转换(但不instanceof经常),直到它(包括已部署的设备)进入2004年.)
使用instanceof和铸造往往表明设计不佳.最好将带有接口的对象放入列表中,客户端代码可以在没有测试的情况下使用该接口,以及映射到列表的每个"真实"目标的不同行为的实现."计算机科学中的每一个问题都可以通过添加另一个间接层来解决"["......除了太多的间接层次."]
一种方法是使用该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如果添加其他类型的汽车,则必须更改像这样或使用类型的代码.
无需您在使用类型做什么的更多信息,我建议你有一个基本类型Vehicle是Car,Bus等全部继承.为您的车辆提供他们需要的方法(覆盖您需要的方法),然后在循环中调用这些方法.