문제

Java의 문자열 클래스와 마찬가지로 불변의 수업을 구축하는 효율적인 방법을 찾고 있습니다.

도움이 되었습니까?

해결책

  1. 모든 필드는 있어야합니다private 그리고 바람직하게는 final
  2. 클래스가 무시할 수 없는지 확인 - 수업을 최종적으로 만들거나 정적 공장을 사용하고 생성자를 비공개로 유지하십시오.
  3. 필드는 생성자/공장에서 채워져 있어야합니다
  4. 필드에 대한 세터를 제공하지 마십시오
  5. 컬렉션을 조심하십시오. 사용Collections.unmodifiable*. 또한 컬렉션에는 불변의 물체 만 포함되어야합니다
  6. 모든 getters는 불변의 물건이나 사용을 제공해야합니다 방어 복사
  7. 객체의 내부 상태를 변경하는 방법을 제공하지 마십시오.

Tom Hawtin 그것을 지적했다 final 선택 사항이 될 수 있습니다. String class 캐시가 있습니다 hash 해시 함수가 호출 될 때만 할당됩니다.

다른 팁

생성자를 사용하여 모든 필드를 채우고 필드를 최종적으로 만드는 경우 - 당신은 그곳에 있습니다.

필드가 사용자 정의 유형을 사용하는 경우에도 불변을 만들어야 할 수도 있습니다.

컬렉션 인 모든 필드는 수정할 수없는 컬렉션을 사용하여 안전한쪽에 있어야합니다.

객체 그래프에 대해 걱정해야합니다!

물체의 모든 방법은 비 결절 필드를 돌봐야합니다. 예를 들어 String.add를 생성합니다 새로운 끈. 하나의 필드를 돌연변이 해야하는 경우 - 사본 생성자를 통해 그렇게하십시오.

마지막으로 객체를 최종적으로 만듭니다.

필드를 수정할 수없는 경우 객체는 불변이 아니므로 해당 필드는 final. 객체가 서브 클래스를 원하지 않으면 클래스 자체를 만들 수 있습니다. final 또한 문자열과 마찬가지로. 많은 정보가있는 불변의 물체를 쉽게 구성하려면 공장 패턴

자세한 내용은 참조하십시오 위키 백과

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top