我试图找出一种很好的方法来迭代和打印出我的ArrayList中的对象。
问题是我似乎无法到达用户输入对象信息的字段(例如颜色和品牌)。
对象的新实例如下所示:
Vehicle C = new Car(4, "Blue", "Honda");
Car(以及其他类,如Bike,Bus等)是Vehicle的子类。
车辆类:
public class Vehicle {
public int pass = 0;
public int cost = 0;
public int size = 0;
public String brand = "";
public String color = "";
public Vehicle(){}
}
汽车班:
public class Car extends Vehicle{
// constructor
public Car(int passengers, String col, String brandOfVehicle){
if (passengers < 0 || passengers > 4){
throw new IllegalArgumentException();
}else
pass = passengers;
cost += pass*15 + 100;
size = 5;
color = col;
brand = brandOfVehicle;
}
} 当试图迭代对象时:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Object i = it.next();
System.out.println(i + " ");
}
当迭代对象时,我想在i.color中获得颜色和品牌字符串。但我猜测,因为我是一个新的对象,也许它无法访问与Car,Bus等相关的字段和方法?
有没有办法解决这个问题?或者这可能不是实际问题?
答案 0 :(得分:2)
我不知道Ferry
的类型是什么,但也许Ferry.iterator()
应该返回Iterator<Vehicle>
而不是Iterator<Object>
。
然后it.next()
将返回对Vehicle
的引用,这将允许您访问Vehicle
的所有公共成员。
Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i.color);
}
如果Ferry
可以包含非Vehicle
的对象,则必须使用强制转换:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Object i = it.next();
if (i instanceof Vehicle)
System.out.println(((Vehicle)i).color);
}
答案 1 :(得分:0)
将对象投射到vihecle并且它可以工作:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = (Vehicle)it.next();
System.out.println(i + " ");
}
您还可以检查是否有来自Vehicle
的子类,然后进行演员。
如果只有Vehicle
可以访问渡轮,您可以将列表更改为:
Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i + " ");
}
答案 2 :(得分:0)
将您的Ferry
重新声明为List<Vehicle>
类型。
然后你可以像
一样使用它Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i + " ");
}
甚至更简单:
List<Vehicle> ferry = ...;
while(Vehicle v: ferry)){
System.out.println(v + " ");
}
请注意,变量名称在Java中应为小写,以便更好地阅读代码。
答案 3 :(得分:0)
Iterator<Vehicle > it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i + " ");
}
您无法访问属性,因为您转换为Object类型,它是Vehicle的超类。