繁体   English   中英

具有静态构造函数的类的多个实例

[英]Multiple instances of class with static constructor

我已经使用静态构造函数设计了某种“单一”实现的现有设计。 我希望能够销毁并重新创建新实例。

可以在不更改基础设计的情况下完成此操作吗?

这是简化的原型:

public static void main(String[] args) {
     ClassA.doWork();
     ClassA.destruct();

     ClassA.doWork(); // <--I need new instance here
}

public class ClassA {
    private static ClassA inst = new ClassA();
    protected ClassA() {
        //init      
    }   
    public static void doWork(){
        //do work
    }   
    public static void destruct(){
        inst = null;
    }
}

如果您确定要走这条路,并且不喜欢对每种方法进行null检查,则可以将“销毁”方法更改为“重置”:

public static void reset(){
        inst = new ClassA();
    }

称之为而不是破坏。

但是,严重的是,不要这样做……花点时间重构这个烂摊子,否则它会再次咬住你!

将以下代码添加到doWork方法中:

public static void doWork()
{
    if(inst == null)
    {
        inst = new ClassA();
    }
    //do work
}  

要么

添加一个单独的方法来创建实例(类似于您必须进行销毁的方式)

public static ClassA init()
{
    if(inst == null)
    {
        inst = new ClassA();
    }
    return inst;
}

doWork方法应检查null实例,并抛出IllegalStateException或创建ClassA的新实例,然后执行以下逻辑:

        public static void doWork(){
            if (inst == null){
                // throw new IllegalStateException("instance has been destroyed");
                // or
                inst = new ClassA();
            }
            // doWork now
        }

doWork方法中创建一个实例,例如:

  private static ClassA inst;
    public static void doWork() {
        if (inst == null) {
            inst = new ClassA();
        }
    }

暂无
暂无

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

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