我正在寻找在 Java 中初始化有界泛型类型的替代方法。到目前为止,我已经找到了 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”。
- 有谁知道是否可以创建解决方法?
- 或者有没有其他方法可以初始化一个通用的有界类?