Java - 创建抽象对象的工厂 class?

Java - Factory class that creates an abstract object?

我有以下 2 个摘要 classes:

public abstract class AbstractCarChecker implements CarService {

}

以及下面扩展 AbstractCarChecker

public abstract class CarChecker<T extends Car> extends AbstractCarChecker {

}

我想要一个工厂 class 来实例化 CarChecker 对象,以便所有子 class 对象(例如 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 来决定 return 的具体实现?例如将 "ford" 传递到 newFrom 方法中知道创建 FordChecker 对象吗?

您不能创建抽象 类 的实例(因此,'abstract object' 根本不是问题)。

工厂的整个概念就是它们代表了创造事物的概念。因此,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);
}

您可以按照以下方式进行:

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 属于混凝土的名称 class。