假设我有四个类:Car
、Convertible
、PickupTruck
和 CarManufacturer
。
Car
是Convertible
和PickupTruck
继承的抽象类:
public abstract class Car {
private String name;
private String colour;
//Constructor
}
Convertible
和 PickupTruck
都有无参数构造函数:
public class Convertible extends Car {
private boolean roofUnfolded;
public Convertible() {
super("Convertible", "Red");
this.roofUnfolded = false;
}
}
public class PickupTruck extends Car {
private double capacity;
public PickupTruck() {
super("Pickup Truck", "Black");
this.capacity = 100;
}
}
CarManufacturer
存储 Convertibles
或 PickupTrucks
的列表。
public class CarManufacturer <T extends Car>{
private List<T> carsProduced = new LinkedList<>();
}
如何实现调用无参数构造函数并将对象添加到列表中的函数 produceCar()
?我试过:
public void produceCar(){
this.carsProduced.add(new T());
}
返回错误:无法直接实例化类型参数'T'
最佳答案
这里解决了同样的问题: https://stackoverflow.com/a/36315051/7380270
关于这个问题,这是可行的:
public class CarManufacturer <T extends Car> {
private Supplier<T> carType;
private List<T> carsProduced = new LinkedList<>();
public CarManufacturer(Supplier<T> carType) {
this.carType = carType;
}
public void produceCar() {
this.carsProduced.add(carType.get());
}
}
public class Main {
public static void main(String[] args) {
CarManufacturer<Convertible> convertibleCarManufacturer = new CarManufacturer<>(Convertible::new);
convertibleCarManufacturer.produceCar();
}
}
关于Java泛型调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45185013/