java - 使用IoDH的单例模式写法,静态内部类的instance变量是否一定需要声明成final的?
阿神
阿神 2017-04-18 10:33:52
0
2
527

方式一:

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

阿神
阿神

闭关修行中......

membalas semua(2)
刘奇

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

阿神

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan