Java泛型调用构造函数

标签 java list generics constructor

假设我有四个类:CarConvertiblePickupTruckCarManufacturer

CarConvertiblePickupTruck 继承的抽象类:

public abstract class Car {
    private String name;
    private String colour;

    //Constructor
}

ConvertiblePickupTruck 都有无参数构造函数:

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 存储 ConvertiblesPickupTrucks 的列表。

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/

相关文章:

java - 如何从 plsql 中的存储过程获取 java 代码中的结果集

C# - 将实现接口(interface)的对象添加到字典

c# - C# 中的 List.Orderby 首先排序为偶数升序的数字,然后为奇数降序的相同数字

c# - 泛型类型参数和 Nullable 方法重载

c# - StackOverflowException 通过使用具有协变泛型参数的显式接口(interface)实现

java - 如何获取条码扫描仪android的 Activity 结果?

java - 如何使用JSP/Servlet将文件上传到服务器?

Java InputStream read() - Android 问题

lisp:将列表列表合并为一个列表?

list - Cython - 使用 python 列表初始化向量 [int]