Java에서 클래스 멤버를 변경할 수없는 메소드를 선언하는 방법은 무엇입니까? [복제]

Nov 30 2020

C ++에서는 상수 메서드를 사용하므로 클래스 멤버의 값을 변경할 수 없지만 Java에서는 어떻게 할 수 있습니까? C ++의 const에 해당하는 최종 메서드 선언을 시도했지만 최종 메서드는 또 다른 것입니다. getter 메서드를 만들고 싶어서 값을 변경할 수없고 읽기만합니다. 읽기 전용 방법과 같습니다.

답변

10 AlexShesterov Nov 30 2020 at 17:16

Java에서는 메서드가 최종 필드가 아닌 필드를 변경하지 못하도록 선언적으로 방지 할 수 없습니다 . Java에는 "const correctness"와 같은 것이 없습니다.

클래스 필드가 아닌 경우 클래스의 final모든 메서드로 변경할 수 있습니다.

참고 final방법 및 클래스 대 필드와 변수를 다르게 작동합니다 :

  • final필드 또는 변수는 일정하다. 한 번 할당 된 값은 변경할 수 없습니다.
  • final방법은 하위 클래스에서 재정의 할 수 없습니다. finalon 메소드는 "constness"와 아무 관련이 없습니다.
  • final클래스는 확장 할 수 없습니다. finalon 클래스는 "constness"와 아무 관련이 없습니다.

Java의 옵션은 다음과 같습니다.

  1. 클래스를 변경 불가능하게 만드십시오 (즉, 모든 필드를 표시하십시오 final).
  2. getter (및 기타 non-mutator 메서드)를 신중하게 작성하십시오. :)

메모 하나 더. 필드와 변수에서도 Java final는 C ++의 const. 예를 들면 :

  • final할당하면 변수는 변경할 수 없습니다, 하지만 당신은 할당 할 수 있습니다 선언 할 수는 없습니다. 예:

      final int value;
      if (condition) {
          value = 1; // Ok!
      } else {
          value = 2; // Ok!
      }
      value = 3; // Compile error: value already assigned.
    
  • final클래스 필드는 직접 또는 생성자 내에서 할당되어야합니다. 그러나 이러한 필드는 생성자 내 어디에서나 할당 될 수 있습니다 . Java에서 C ++의 "초기화 목록"과 같은 특별한 것은 없습니다.

  • final Object objJava 의 필드 / 변수 / 매개 변수 선언 은 C ++의 상수가 아닌 객체대한 (const-) 참조 와 거의 동일합니다 . 즉, 참조를 다시 할당 없지만 참조 된 객체 자체 변경할 있습니다. 예 :

      // Note that (obsolete) Date class is mutable in Java.
      final Date myDate = new Date();
    
      myDate = new Date(); // Compilation error: can't reassign a final reference!
    
      myDate.setTime(4711); // Ok, mutating referenced object is allowed!
    
salapura.stefan Nov 30 2020 at 17:17

당신은 그렇게 할 수 없습니다. 최종 방법은 재정의 할 수 없음을 의미합니다.