单例类每次都返回新实例 [英] Singleton Class return new Instance every time
本文介绍了单例类每次都返回新实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建单例类,但是每次都会返回一个新实例.这是我的代码.
I'm trying to make a singleton class, but it returns me a new instance every time. Here is my code.
我有没有犯错?为什么每次都返回一个新实例?
Did I make any mistake? Why does it return a new instance every time?
应该与我想的一样.
public final class SingletonA {
private static SingletonA instance;
private SingletonA(){
}
public static SingletonA getInstance() {
if(instance==null)
{
System.out.println("RETURNING NEW INSTANCE OF SingletonA Class");
return new SingletonA();
}
System.out.println("RETURNING OLD INSTANCE OF SingletonA Class");
return instance;
}
}
public class SingletonB {
public static void main(String[] args) {
SingletonA one = SingletonA.getInstance();
System.out.println("1."+one+" | "+one.hashCode());
SingletonA two = SingletonA.getInstance();
System.out.println("2."+two+" | "+two.hashCode());
SingletonA three = SingletonA.getInstance();
System.out.println("3."+three+" | "+three.hashCode());
}
}
// HERE IS THE OUTPUT
RETURNING NEW INSTANCE OF SingletonA Class
1.oop.singleton.SingletonA@2a139a55 | 705927765
RETURNING NEW INSTANCE OF SingletonA Class
2.oop.singleton.SingletonA@15db9742 | 366712642
RETURNING NEW INSTANCE OF SingletonA Class
3.oop.singleton.SingletonA@6d06d69c | 1829164700
推荐答案
您应该在返回空检查的测试之前,将实例初始化为新的SingletonA().
You should initialize instance to new SingletonA() just before returning in the test for null check.
public final class SingletonA {
private static SingletonA instance;
private SingletonA(){
}
public static SingletonA getInstance() {
if(instance==null)
{
System.out.println("RETURNING NEW INSTANCE OF SingletonA Class");
// You are missing this assignment.
instance = new SingletonA();
return instance;
}
System.out.println("RETURNING OLD INSTANCE OF SingletonA Class");
return instance;
}
}
这篇关于单例类每次都返回新实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文