如何从 Java 的超类中的静态方法创建子类的新实例?

How can I create a new instance of a subclass from a static method in its superclass in Java?

我有一个抽象的单例 class,我希望它有一个 instance 字段来表示单例的实例。我试过这样做:

public abstract class AbstractClass {
    private static AbstractClass instance;

    public static AbstractClass getInstance() {
        return instance == null ? this.getClass().newInstance() : instance;
    }    
}

我想让它起作用,这样当我从 AbstractClass 的子 class 调用它时,它 returns 是那个子 class 的一个实例,而不是一个实例AbstractClass,这就是为什么我尝试使用 this#getClass() 而不是 AbstractClass。这当然会给我一个错误,指出“不能在静态上下文中使用它”。有没有办法在其 superclass?

的静态方法中生成 subclass 的新实例

this 不能在 static 方法中使用,因为没有明确的对象来解析 this 引用。

除了这个约束之外,Parent class 不知道可以从它扩展的可能子classes(除非sealed)。

因此,它无法创建子class的显式实例。

根据您的问题,您可能希望采用某种形式的 Factory 模式来管理对象创建。 (或其他创作模式)