繁体   English   中英

Java:如何使用超类的静态方法从其创建子类的实例

[英]Java: How to Create an instance of a subclass from with a Static method of the super class

我的特定问题是我想在基类中创建一个静态方法,该方法将子类的实例保存在文件中。 基类中的另一个静态方法将检索数据并重新创建子类的实例。

除了我需要在基类的静态方法中创建子类的实例的策略之外,我已经完成了所有工作。 请在下面查看我的意思。

因此,通常的问题是在Java中,如何从超类的Static方法中创建子类的实例。

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{
}

除了您的代码不是有效的Java语法之外,这完全是您完成的方式。 但是,正如其他人所建议的那样,您实际上正在做的事情实际上可能更适合(纯加工)工厂模式。

Base.java

public class Base {
    public static void retrieveAllInstances() {
        Sub sub = new Sub();
    }
}

子java

public class Sub extends Base{
}

工作正常。 除了循环引用之外,但是如果您不关心可维护性,请淘汰一下自己。

使用工厂模式可以正常工作。 并在伪代码中看起来像这样:

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{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM