如何从 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
模式来管理对象创建。 (或其他创作模式)
我有一个抽象的单例 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?
this
不能在 static
方法中使用,因为没有明确的对象来解析 this
引用。
除了这个约束之外,Parent
class 不知道可以从它扩展的可能子classes(除非sealed
)。
因此,它无法创建子class的显式实例。
根据您的问题,您可能希望采用某种形式的 Factory
模式来管理对象创建。 (或其他创作模式)