>

상수 객체에 대한 참조는 어떻게 만듭니 까?

final Myclass obj = new Myclass();

작동하지 않습니다. obj (참조)를 다시 할당해서는 안되지만 참조 된 객체는 여전히 변경할 수 있습니다.
구성된 개체 자체가 변경되지 않도록하고 싶습니다.


  • 답변 # 1

    String 와 같이 불변으로 만듭니다.  입니다). 또는 다른 객체로 감싸서 해당 객체의 뮤 테이터에 대한 액세스를 제한하십시오 (예 : Collections.unmodifiableList() ).  그리고 consorts do).

  • 답변 # 2

    최종과 불변의 두 가지를 혼합하고 있습니다.

    변수는최종일 수 있으므로 초기화 된 후에는 값 (또는 객체 참조)을 변경할 수 없습니다 (물론 참조의 객체 속성을 변경할 수는 있습니다)

    개체는불변(키워드가 아니라 속성) 일 수 있으므로 생성 된 후에는으로 변경할 수 없습니다. 문자열은 좋은 예입니다. String 객체 내에서 백업 문자 []를 변경할 수 없습니다.

  • 답변 # 3

    원하는 것은 불변 객체입니다. Java에는 객체를 즉시 변경할 수없는 키워드가 없습니다. 상태를 변경할 수 없도록 객체의 논리를 설계해야합니다. BalusC가 말했듯이 뮤 테이터에 대한 액세스를 제한하는 다른 객체로 래핑 할 수 있습니다.

  • 답변 # 4

    Java에서이를 가능하게하는 키워드가 없다고 생각합니다. 참조가 상수/최종 임에도 불구하고 객체의 내부는 여전히 변경 될 수 있습니다.

    가장 좋은 옵션은 클래스의 ReadOnly 구현 버전을 사용하는 것입니다.

    자세한 내용은 여기를 참조하십시오 : http://en.wikipedia.org/wiki/Const-correctness#final_in_Java

  • 답변 # 5

    Java에서 불변 클래스는 일반적으로 변경되지 않는 것을 의미합니다 "setters"가 있고 "getter"로 액세스 할 수있는 모든 필드도 변경할 수 없습니다. 데이터를 클래스로 가져 오려면 값을 인수로 사용하는 생성자가 있어야합니다.

    공개 클래스 MyClass {
      무언가를 끈다;
      다른 것;
      // 생성자 만 클래스를 수정할 수 있습니다
      공개 MyClass (String something, int somethingElse) {
        this.something = 무엇인가;
        this.somethingElse = somethingElse;
      }
      // "무언가"에 액세스합니다. 문자열이며 변경할 수 없습니다.
      공개 문자열 getSomething () {
        무언가를 반환;
      }
      // "somethingElse"에 액세스하십시오. int이며 불변입니다.
      공개 int getSomethingElse () {
         다른 것을 반환;
      }
    }
    

관련 자료

  • 이전 c++ - QPen setCosmetic이 높은 QGraphicsView 스케일에서 작동하지 않습니다
  • 다음 Excel에서 VBA를 사용하여 Outlook Mail msg 파일 열기