1

我正在寻找在 Java 中初始化有界泛型类型的替代方法。到目前为止,我已经找到了 3 个潜在的替代方案:

  1. 仿制药厂
  2. 存储
  3. 内置供应商界面

最初,我认为仿制药工厂会更灵活,但是当我看到内置的供应商时,我相信这会更灵活,也更容易维护。所以我基于SomeContainer创建了以下示例:
汽车示例

假设我有一个带有子类的 CarPart 类,并且我有一个汽车类(其中 T 扩展 CarPart),它应该包含扩展 CarPart 类的任何类型的列表。我正在尝试查看是否有替代方法来初始化任何潜在的 CarPart 子类并添加到 carParts 列表(方法 addNewGenericCarPart())。

这是代码:

public class Car<T extends CarPart> {
    private Supplier<T> carPartsSupplier;
    List<T> carParts;

    Car(Supplier<T> carPartsSupplier){
        this.carPartsSupplier=carPartsSupplier;
    }

    T createCarParts(){
        return carPartsSupplier.get();
    }

    public Car(List<T> carParts) {
        this.carParts = carParts;
    }
    void addNewGenericCarPart(){
//        TODO:Create a new generic Part Subclass
        Car<T> anythingExtendsCarParts=
                new T(T::new);//Error:Cannot resolve constructor 'T'

//        TODO:Add the new generic Part to carParts
        carParts.add(anythingExtendsCarParts);
    }
}
public class CarPart {
    String name="default";

    public CarPart() {
    }

    public CarPart(String name) {
        this.name = name;
    }

    void printCarParts(){
        System.out.println(name);
    }
}
public class CarPartSubclass extends CarPart {
    String subname;

    public CarPartSubclass() {
    }

    public CarPartSubclass(String name, String subname) {
        super(name);
        this.subname = subname;
    }

    void print(){
        System.out.println("This is a CarpartSubclass");
    }
}
public class Main {
    public static void main(String[] string) {
        List<CarPartSubclass> carPartsSubclassList=new ArrayList<>();
        carPartsSubclassList.add(new CarPartSubclass());

        Car<CarPartSubclass> car=new Car<CarPartSubclass>(carPartsSubclassList);
        car.addNewGenericCarPart();
    }
}

上面的代码导致错误

无法解析 Car 类的方法 addNewGenericCarPart() 中的构造函数“T”。

  • 有谁知道是否可以创建解决方法?
  • 或者有没有其他方法可以初始化一个通用的有界类?
4

0 回答 0