【发布时间】:2014-06-04 18:14:39
【问题描述】:
这是一个非常简单的 Java 泛型示例。我的问题是为什么编译器在 intellij 13 和 Java 7 中不显示编译错误而不运行代码,当类在 arraylist 中添加我的 AirUnits 列表时需要实现 Vehicle 的类型而不是实现 AirUnit 的类型需要 HighWay 类的车辆。
车辆:
public interface Vehicle {
void goForward();
}
空军单位:
public interface AirUnit {
void fly();
}
Highway 类,它接收一组车辆并运行它们并打印它们的 toString()。
import java.util.ArrayList;
public class HighWay<T extends Vehicle> {
private ArrayList<T> vehicles;
public HighWay(ArrayList<T> vehiclesOnTheRoad){
this.vehicles = vehiclesOnTheRoad;
}
public void moveTheVehicles(){
for(T vehicle: vehicles){
System.out.println(vehicle);
}
}
}
客户
import java.util.ArrayList;
public class Client {
public static void main(String[] args) {
Vehicle car = new Car();
Vehicle bike = new Bike();
AirUnit plane = new Plane();
ArrayList<Vehicle> vehicles = new ArrayList();
ArrayList<AirUnit> airUnites = new ArrayList();
airUnites.add(plane);
vehicles.add(car);
vehicles.add(bike);
// should show compile error because HighWay is expecting something
// that implements Vehicle but it is now showing any errors
// until I run the app and it breaks in the loop.
HighWay<Vehicle> highWay = new HighWay(airUnites);
highWay.moveTheVehicles();
}
}
【问题讨论】: