Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用具有未知类的静态工厂方法_Java - Fatal编程技术网

Java 调用具有未知类的静态工厂方法

Java 调用具有未知类的静态工厂方法,java,Java,嗨,我有一个抽象类,它有许多子类。我想使这个抽象类的构造函数私有,并创建工厂方法。这个方法在每个子类中的工作方式应该是怎样的?如果我提出: return new AbstractClass(); 我得到的错误是:类是抽象的,不能是实例。。。我应该使用反射吗?您可以使用super关键字从子类访问抽象类的构造函数 public SubClass() { super(); // this will call AbstractClass() // something else that

嗨,我有一个抽象类,它有许多子类。我想使这个抽象类的构造函数私有,并创建工厂方法。这个方法在每个子类中的工作方式应该是怎样的?如果我提出:

return new AbstractClass();

我得到的错误是:类是抽象的,不能是实例。。。我应该使用反射吗?

您可以使用
super
关键字从子类访问抽象类的构造函数

public SubClass() {
    super(); // this will call AbstractClass()
    // something else that you want to do for this subclass
}

正如评论中已经指出的,您不能将
new
关键字用于抽象类。当你使用new时,你需要知道真正的类型

您可以在抽象基类中实现工厂方法,并让它根据传递给create方法和/或某些内部逻辑的参数来决定返回哪个非抽象子类


或者,您可以将工厂方法本身抽象化,并在每个非抽象子类中实现它,以返回该类型的对象。

您不能创建抽象类的对象。您只能创建引用变量。您不能使用“new AbstractClass()”,它正在创建一个新对象,这对于抽象类来说是不可能的。您可以使用反射并编写自己的代码来实现这一点。我个人会使用依赖注入库。像Guice或Spring。摆脱抽象类,使用接口。我知道我不能创建抽象实例。问题是另一个,请再读一遍@EnnoShoiji好的,我看看,谢谢