单例类每次都返回新实例 [英] Singleton Class return new Instance every time

查看:57
本文介绍了单例类每次都返回新实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建单例类,但是每次都会返回一个新实例.这是我的代码.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆