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
创建实例。