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

Java 具有静态构造函数的类的多个实例,java,Java,我已经设计了一种带有静态构造函数的“单例”实现。 我希望能够销毁并重新创建新实例 这可以在不改变基础设计的情况下完成吗 这是一个简化的原型: public static void main(String[] args) { ClassA.doWork(); ClassA.destruct(); ClassA.doWork(); // <--I need new instance here } public class ClassA { privat

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

这可以在不改变基础设计的情况下完成吗

这是一个简化的原型:

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;
    }
}
publicstaticvoidmain(字符串[]args){
类别a.doWork();
ClassA.destruct();

ClassA.doWork();//将以下代码添加到
doWork
方法:

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

添加一个单独的方法来创建实例(类似于破坏存储)


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

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

添加一个单独的方法来创建实例(类似于破坏存储)


方法
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
应检查
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();
        }
    }

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

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

如果您决定走这条路,并且不喜欢对每个方法进行空检查,您可以将“析构函数”方法更改为“重置”:

公共静态无效重置(){ inst=新的ClassA(); } 调用它而不是destruct


但是,说真的,不要这样做……现在就花时间重构这个混乱局面,否则它会回来咬你!

如果你决定走这条路,并且不喜欢对每个方法进行空检查,你可以将“析构函数”方法改为“重置”:

公共静态无效重置(){ inst=新的ClassA(); } 调用它而不是destruct


但是,说真的,不要这样做……现在就花点时间重构这个混乱局面,否则它会回来咬你的!

你可以在你的工作()中使用inst=new ClassA()方法,如果您每次调用该方法时都需要一个新实例。这可以在不更改基础设计的情况下完成吗?可能。我应该保留基础设计吗?可能不是。不是每次,只有当实例显式destroyed@assylias,我同意,但情况就是这样。你可以在你的工作()中使用inst=new ClassA()方法,如果您每次调用该方法时都需要一个新实例。这可以在不更改基础设计的情况下完成吗?可能。我应该保留基础设计吗?可能不是。不是每次,只有当实例显式destroyed@assylias,我同意,但事实就是这样。问题是,我的嫁妆不止一件方法,我必须将此节添加到它们中的每一个。然后使用单独的方法
init
创建实例。问题是,我有多个doWork()方法,我必须将此节添加到它们中的每一个。然后使用单独的方法
init
创建实例。