当前位置: 首页 > 面试题库 >

Java中Singleton的其他方式

范承志
2023-03-14
问题内容

只是我在考虑编写单例课程的其他方式。那么,该课程被视为单身人士课程吗?

      public class MyClass{
            static Myclass myclass;

            static { myclass = new MyClass();}

            private MyClass(){}

            public static MyClass getInstance()
            { 
                return myclass;
            }
       }

因为静态块只能运行一次。


问题答案:

不它不是。您没有声明myClass private static final,也不getInstance()static。该代码也不会真正编译。

这是单例成语:

public class MyClass {
    private static final MyClass myClass = new MyClass();

    private MyClass() {}

    public static MyClass getInstance() {
        return myClass; 
    }
}

应该为private,以便其他任何人都不能直接访问它。应该static只有一个。应该final这样,以便不能重新分配它。您还需要在声明期间
直接 实例化它,这样就不必担心线程那么多。

如果加载成本很高,因此您宁愿延迟加载Singleton,则考虑Singleton
Holder
习惯用法,它按需进行初始化,而不是在类加载期间进行初始化:

public class MyClass {
    private MyClass() {}

    private static class LazyHolder {
        private static final MyClass myClass = new MyClass();
    }

    public static MyClass getInstance() {
        return LazyHolder.myClass;
    }
}

但是,您应该提出一个大问号,是否需要一个 Singleton 。通常不需要。 静态变量,枚举,工厂类和/或依赖项注入通常是更好的选择。



 类似资料:
  • 我尝试创建一个JavaRDD,其中包含另一系列RDD。 RDD机器。foreach(机器- 第一:有没有可能这样做?如果没有,我可以用什么方式尝试做一些不同的事情? 让我展示一下我尝试做的事情: 我尝试在每台机器上启动我的算法,这台机器必须从Elasticsearch中的数据中学习。 因此,我尝试在每个“机器”中获取查询的所有数据。我的问题是:Spark有可能做到这一点吗?或者以其他方式?当我点燃

  • 其他认证方法 还有两种其他身份验证方法值得一提。它们是一次性密码和证书。 一次性密码 FreeRADIUS包含一个名为rlm_otp的模块,可用于处理OTP(一次性密码)令牌。该模块应与其他程序一起使用。 不幸的是,为其他程序提供代码的公司Tri-D Systems已经不存在了。但是,代码是分叉的,现在可以从Google Code(http://code.google.com/p/otpd/)获得

  • 问题内容: 我有我在create()方法中创建的对象编号列表,我想访问它,以便可以在question()方法中使用它。 还有可能我可能错过的另一种方法吗?我搞砸了吗?如果没有,我应该如何获得与以下相同的功能? 问题答案: 有趣的是,列出的两个答案都忽略了发问者正在使用静态方法的事实。因此,除非类类或成员变量也被声明为静态或静态引用,否则该方法将无法访问任何类或成员变量。这个例子: 会起作用的,但是

  • 当您的系统里同时安装了 java 6 及 java 7 的时候,系统默认使用的 java 版本不一定是 java 7. 运行命令 java -version, 查看输出: 如果输出中显示 “java version “1.7.0_xx”, 那么您默认的 java 版本是 java 7. 您可以略过下面的步骤。 如果输出中显示 “java version “1.6.0_xx”, 那么您默认的 jav

  • 问题内容: 编辑:回答-错误是方法不是静态的 我使用了Singleton设计模式 我的问题是如何在 另一个 类中创建Singleton 类的对象? 我试过了: 什么是正确的代码? 谢谢,斯宾塞 问题答案: 是正确的方法。确保您的方法确实正确。 由于您的实现远非安全- 您的对象可以通过反射实例化,因此您可能想基于

  • 问题内容: 我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。 没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。 问题答案: 在谷歌测试