필자는 불변의 클래스가 final이어야한다고 항상 들었다. 하지만 불변의 최종 클래스 개체를 가질 수 있는지 궁금 해서요. 이 링크 (Why would one declare an immutable class final in Java?)는 변경 불가능한 클래스 메서드가 final이며 재정의 할 수없는 경우를 나타냅니다. 그리고 클래스의 모든 멤버가 final 인 경우 해당 클래스의 객체는 변경할 수 있습니다 (변경 가능한 객체를 참조하지 않는 한). 제발 틀렸다고 말하면 제게 말해줘.final이 아닌 불변의 클래스
답변
불변의 클래스 (final이 아님을 의미)를 확장 할 수 있다면, 하위 클래스에 변경할 수있는 속성을 추가 할 수있다. 그러므로 기본 클래스는 가변적 인 하위 클래스를 가질 수 있기 때문에 기본 클래스도 변경할 수 있습니다.
불변 클래스가 반드시 final 일 필요는 없지만 서브 클래스 화되지 못하도록해야합니다. 공개 또는 보호 된 생성자가 없기 때문입니다.
예를 들어 Guava의 ImmutableList
클래스는 final이 아니지만 Javadoc에 설명 된대로 변경할 수 없습니다.
불변 클래스를 생성하려면 클래스를 final로 표시 할 필요는 없습니다.
Java 클래스 자체에서 이러한 예제 중 하나를 취하게하겠습니다. "BigInteger"클래스는 불변이지만 최종이 아닙니다.
실제로 Immutability는 개체가 어떤 개체를 만든 다음 수정할 수 없는지에 대한 개념입니다.
JVM 관점에서 모든 스레드가 객체의 동일한 사본을 공유해야하며 모든 스레드가 스레드에 액세스하기 전에 완전히 구성되어야하며 객체의 상태가 생성 후에 변경되지 않는다고 생각해 봅시다. .
- :
불변성이이 생성되면 요 오브젝트의 상태를 변경할 수있는 방법이 없으며, 이러한 클래스는 불변 인식 컴파일러하게 세 손가락 규칙에 의해 달성되고, 그들은 다음과 같은 의미 모든 비공개 필드가 최종적이어야 함 개체 필드를 직접 또는 간접적으로 변경할 수있는 메서드가 클래스에 없는지 확인하십시오. 클래스에 정의 된 개체 참조를 클래스 외부에서 수정할 수 없습니다. 자세한 내용 아래 URL을 참조하십시오.
http://javaunturnedtopics.blogspot.in/2016/07/can-we-create-immutable-class-without.html
자신의 블로그를 과도하게 홍보하는 것은 금지되어 있습니다. [도움말 센터] (http://stackoverflow.com/help/behavior)를 참조하십시오. –
- 1. 불변의 클래스 객체
- 2. 파이썬, 서브 클래스 불변의 유형
- 3. Java에서 final이 아닌 내부 클래스의 변수에 액세스하려면 어떻게해야합니까?
- 4. NHibernate가 불변의 클래스 인스턴스를 삭제하는 이유는 무엇입니까?
- 5. java.lang.IllegalStateException : 글래스 피시 사용시 클래스 불변의 위반
- 6. richfaces 4.2.1.final이 부두와 일하지 않는다. 8
- 7. 불변의 객체는
- 8. 불변의 컬렉션입니까?
- 9. 불변의 문자열 클래스입니까?
- 10. 불변의 클래스와 특성?
- 11. 불변의 사전을 파이썬으로 해싱
- 12. 불변의 목록을 되 돌리는 것
- 13. 기본이 아닌 생성자가있는 클래스
- 14. 인터페이스가 아닌 모의 클래스
- 15. 스파 스, 게으른 불변의 불변의 배열을위한 스레드 안전 캐시
- 16. 이것은 불변의 우수 사례입니까? 가정하자
- 17. 불변의 콜렉션 구현
- 18. .NET 불변의 객체
- 19. 매핑 불변의 속성 여기
- 20. 무엇이 불변의 레코드입니까?
- 21. 잡히지 않는 불변의 위반
- 22. 불변의 것으로 설계하기 (스칼라에서)
- 23. 불변의 닷 넷 문자열
- 24. Java의 모든 불변의 타입
- 25. 파이썬 불변의 유형을 변경
- 26. 불변의 벡터 업데이트 요소
- 27. 불변의 사전 오버 헤드?
- 28. 불변의 NSStrings 공유하기
- 29. 불변의 필드와 평생 불일치
- 30. Doctrine 2의 불변의 콜렉션?
좋습니다.이 경우에는 변경 불가능한 부모 참조가있는 하위 클래스 객체를 만들 수 있습니다. 이제 참조가 가리키는 것은 실제로 변경 될 수 있습니다. 내가 맞습니까? –
@jayendrabhatt 네, 맞습니다. – Eran