我的具体问题是我想在基类中创建一个静态方法,它可以将子类的实例保存在文件中。基类中的另一个静态方法,它检索数据并重新创建子类的实例。
我已经完成了所有工作,除了在我的策略中我需要在基类的静态方法中创建子类的实例。请看下面我的意思。
所以一般的问题是在Java中如何从超类的静态方法中创建子类的实例。
class Base
public static Void saveAllInstances(){
saveAttributesofAllInstancesInFile(); // this works
}
public static Void retrieveAllInstances(){
destroyAllInstances(); // this works
getInstanceAttributesFromFile(); // this works and returns e.g. ArrayList<HashMap>
for( instanceAttributes : retrievedInstances ){
// Here is the part I cant figure out: I want to create an instance of
// the subclass here
sub = new Sub();
sub.setAttributes(instanceAttributes); //this works
}
}
class Sub extends Base{
}
答案 0 :(得分:0)
除了您的代码不是有效的Java语法之外,完全按照您的方式完成。然而,正如其他人所说,你正在做的事情实际上可能更适合(纯粹制造)工厂模式。
Base.java
public class Base {
public static void retrieveAllInstances() {
Sub sub = new Sub();
}
}
Sub.java
public class Sub extends Base{
}
工作正常。除了循环引用外,如果你不关心可维护性,那就把自己搞得一团糟。
答案 1 :(得分:0)
使用工厂模式可以正常工作。在伪代码中看起来像这样:
class MainFactory{
protected Worker makeWorker(){
return new Worker();
}
public createIntanceOfSubworker(){
Worker i = makeWorker()
}
}
class SubFactory extends MainFactory{
@override
protected SubWorker makeWorker(){
return new SubWorker();
}
}
class Worker{
}
class SubWorker extends Worker{
}