gpt4 book ai didi

java - 创建扩展抽象类的子类的实例 (Java)

转载 作者:搜寻专家 更新时间:2023-11-01 01:05:42 26 4
gpt4 key购买 nike

在 Java 中,有没有办法在类 A 的成员方法中创建任何扩展抽象类 A 的类的实例?扩展抽象类 A 的类将使用此方法返回它们的实例,但我不想在所有子类中使用“return this();”实现相同的方法。亲切的线。

编辑:好的,很抱歉简短的解释。在我的应用程序中,有一个名为 Application 的接口(interface),它有一个返回 Application 类型的 getInstance() 方法。有一个抽象类叫AbstractApplication,它是Application接口(interface)实现的便利类,但在其他应用中只暴露接口(interface)。在其他一些应用程序中,会有一个应用程序对象的查找,这个查找将返回一个应用程序类型(接口(interface)),而不是具体的实现。现在这是我的问题;有没有办法在 AbstractApplication 类中实现 getInstance() 这样子类就不需要实现这个方法了?

最佳答案

是的。这很简单(除非我误解了)

你必须使用原型(prototype)设计模式(或者我在这里展示的它的变体)

当您直到运行时才知道工厂类可能是什么时,它很有用。与 AbstractFactory 不同,您可以让不同的子类创建新类型,但您可以根据特定条件选择一个。

使用原型(prototype),您可以简单地将“原始”对象(原型(prototype))注入(inject)到您的应用程序中(借助于完整的 future 依赖注入(inject)框架或通过简单的类名),然后创建它的新实例。

下面是一个示例代码,展示了如何使用一个变体(不使用 clone 而是使用 newInstance 方法)

public abstract class Application {
public Application newInstance() {
try {
return this.getClass().newInstance();//this creates an instance of the subclass
} catch( InstantiationException ie ){
throw new RuntimeException( ie );
} catch( IllegalAccessException iae ){
throw new RuntimeException( iae );
}
}
public String toString() {
return "This is the class named: \""+ this.getClass().getSimpleName()+"\"";
}
}
// subclasses doesn't repeat the creation part
// they just have to override specific methods.
class FirstClass extends Application {}
class SecondClass extends Application {}
class ThirdClass extends Application {}

你的代码的其余部分可以编程到 Application 接口(interface):

public void doSomethingWith( Application application ) {
System.out.println( application.toString() );
}
public void startApplication( Application app ) {
// etc etc
}

每当您需要一个新实例时,您只需调用:

Application newApp = original.newInstance();

这将创建正确的类型。

如你所见,子类并没有指定如何创建新的子类,这些都在基类中。

调用方法 newInstance 将始终创建一个相同类型的新实例。

关于java - 创建扩展抽象类的子类的实例 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3001490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com