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

方式一:

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

阿神
阿神

闭关修行中......

모든 응답 (2)
刘奇

final을 추가하면 mutable이 됩니다. 다른 차이점은 없습니다.
Singleton에 대한 더 나은 접근 방식은 Enum을 사용하는 것입니다(자세한 내용은 Effective Java 참조).

    阿神

    private을 선언하면 다른 클래스에서 직접 접근할 수 없습니다(리플렉션 제외). 반사적 접근이 걱정된다면Enum을 사용하여 위에서 언급한 것처럼 싱글톤을 생성하세요.

      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!