Rumah  >  Soal Jawab  >  teks badan

java - 使用IoDH的单例模式写法,静态内部类的instance变量是否一定需要声明成final的?

方式一:

public class Singleton {
    private Singleton() {
    }

    private static class LazyHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return LazyHolder.INSTANCE;
    }
}

一般而言,这种方式见得最多的写法是static final,那么final是否是必须的呢?
多个线程调用静态方法getInstance()时,JVM也只会加载和初始化内部类一次,将静态变量INSTANCE定义不可变的final是否必须?
在wikipedia的页面中,采取的是方式一:Initialization-on-demand holder idiom

阿神阿神2718 hari yang lalu497

membalas semua(2)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 10:35:52

    Selepas menambah akhir, ia menjadi berubah.
    Pendekatan yang lebih baik untuk Singleton ialah menggunakan Enum (lihat Java Berkesan untuk butiran).

    balas
    0
  • 阿神

    阿神2017-04-18 10:35:52

    Tiada perbezaan Jika private diisytiharkan, kelas lain tidak boleh mengaksesnya secara langsung (kecuali untuk refleksi). Jika anda bimbang tentang akses reflektif, gunakan Enum untuk mencipta singleton seperti yang dinyatakan di atas.

    balas
    0
  • Batalbalas