我有以下2个抽象类:
public abstract class AbstractCarChecker implements CarService {
}
以及以下扩展AbstractCarChecker的内容
public abstract class CarChecker<T extends Car> extends AbstractCarChecker {
}
我想要一个工厂类来实例化CarChecker对象,以便所有子类(例如FordCheckerFactory
)都可以对其进行扩展以创建实例。
public class CarCheckerFactory {
public CarCheckerFactory() { }
public static CarChecker newFrom(String carName, String carReg) {
CarChecker carChecker = new CarChecker(carName, carReg);
return carChecker;
}
}
但是问题是我无法实例化CarChecker
作为其摘要。
最好的方法是什么,使用if statement
决定要返回的具体实现?例如将{ford“传递到newFrom
方法中以了解是否创建了FordChecker对象?
答案 0 :(得分:0)
您无法创建抽象类的实例(因此,“抽象对象”根本不是问题)。
工厂的整个概念是,它们代表创造事物的概念。因此,newFrom
方法不应是静态的(因为它可能也曾经是构造函数,而工厂作为一个概念是没有用的;工厂起着使构造函数具有多态性的作用,就像实例方法一样)能够)。因此:
public interface CarCheckerFactory<T extends Car> {
CarChecker<T> newFrom(String carName, String carReg);
}
public class FordCheckerFactory implements CarCheckerFactory<Ford> {
return new FordChecker(carName, carReg);
}
答案 1 :(得分:0)
您可以执行以下操作:
public static CarChecker newFrom(String carName, String carReg, String className) {
Class<?> theClass = Class.forName(className);
Constructor<?> cons = theClass.getConstructor(String.class,String.class);
CarChecker carChecker = cons.newInstance(new Object[] {carName, carReg });
return carChecker;
}
其中className
与具体类的名称有关。