Java String 클래스처럼 불변 클래스를 만드는 데 효율적인 방법을 찾고 있습니다.가능한 개체를 만들 수있는 가능한 방법
답변
- 모든 필드는 클래스가 가 재정의 할 수 없습니다 확인
private
바람직final
- 을해야합니다 생성자/팩토리
- 필드에 대한 설정자를 제공하지 마십시오.
- 컬렉션에주의하십시오.
Collections.unmodifiable*
을 사용하십시오. 또한, 컬렉션은 불변 객체 - 모든 게터가 불변의 객체를 제공하거나 defensive copying
- 이 객체의 내부 상태를 변경 있는 방법을 제공하지 마십시오 사용해야합니다 포함되어야합니다.
Tom Hawtin은 final
이 선택적 일 수 있다고 지적했다. String
class
에는 해시 함수가 호출 될 때만 할당되는 캐시 hash
var가 있습니다.
썬 문자열 구현에 최종 필드가 아닌 인스턴스 필드가 있습니다. –
좋은 지적. '최종'은 요구 사항이 아닙니다. String의 hash 변수는 완벽한 예입니다. –
파생 클래스가 보호 된 필드를 노출하지 않도록 클래스를 final로 만드는 것에 대해서도 고려해야합니다. –
를 참조하면 자세한 내용 Factory Pattern
보라, 많은 정보와 불변의 객체를 생성하고 필드 최종하려면 - 당신은 도중에있다 그곳에.
필드가 사용자 정의 유형을 사용하는 경우이를 변경할 수 없게해야 할 수도 있습니다.
컬렉션 인 모든 필드는 수정 불가능한 컬렉션을 사용해야하며 안전한쪽에 있어야합니다.
개체 그래프에 대해 걱정할 필요가 있습니다!
개체의 모든 메서드는 최종 필드가 아닌 경우 처리해야합니다. 예 : String.add는 새 문자열을 만듭니다. 한 필드를 변경해야하는 경우 복사 생성자를 통해 변경하십시오.
마지막으로 개체를 최종화하십시오. 클래스 최종 를하거나 정적 공장을 사용하고 민간에서 채워야합니다
예를 들어 설명해 주시면 감사하겠습니다. –
아직 사본이 없다면 Josh Bloch의 Effective Java 사본을 얻으십시오. 그는 내가 할 수있는 것보다 훨씬 더 잘 설명한다! – Fortyrunner
분명히, 오늘 그 자체로 그것을 할 것입니다. 감사합니다 –
- 1. 선택 가능한 데이터 포인트로 jqplot을 만들 수있는 방법
- 2. html 파일에서 가능한 CSS 규칙을 자동으로 만들 수있는 소프트웨어가 있습니까?
- 3. 가능한 시누 라보기에서 가능한 열거 기호를 나열하는 방법?
- 4. 어떻게 편집 가능한 테이블을 만들 수 있습니까?
- 5. 가능한 중복
- 6. 확장 가능한 셀이있는 편집 가능한 QTreeView
- 7. Java로 값으로 변경 가능한 객체를 전달하는 방법
- 8. 개체를 만들 수있는 종속성 주입 지연이 필요합니까?
- 9. FPGA 보드에 구현 가능한 구성 가능한 프로세서
- 10. OOP - 가능한 개체 후보를 선택하는 방법?
- 11. 아이폰에서 스크롤 가능한 탭 바를 만드는 방법
- 12. 확장 가능한 목록보기와 함께 스크롤 가능한 맞춤보기를 만드는 방법 ...?
- 13. 플렉스에서 개체의 정렬 가능한 목록을 구현하는 방법
- 14. 신뢰할 수있는 (지속 가능한) 분산 로깅 엔진
- 15. 순서대로 선택할 수있는 선택 가능한 jquery
- 16. 클릭 할 수있는 정렬 가능한 헤더가있는 UITableView
- 17. 라이브러리 중 하나에 정적으로 링크 할 수있는 이동 가능한 방법
- 18. 원격 서버에서 파일을 읽을 수있는 모든 가능한 방법
- 19. 삽입 가능한 이미지를 만드는 방법
- 20. 편집 가능한 editext를 중지하는 방법
- 21. 재사용 가능한 활동을 만드는 방법!
- 22. 인쇄 가능한 파일에 html로보고하는 방법
- 23. 사용 가능한 언어를 얻는 방법
- 24. 미리보기가 가능한 AJAX 이미지 업로드 가능한 jquery
- 25. jQuery 드래그 가능한 정렬 가능한 입력 요소
- 26. 가능한 제어가 있습니까?
- 27. 쓰기 가능한 정적 데이터 검색
- 28. VBA를 사용하여 Word 필드를 만들 수있는 방법
- 29. 관찰 가능한 컬렉션 읽기
- 30. 은 가능한
String과 같은 클래스를 찾고 계십니까? 처음에는 그런 식으로 질문을 읽지 않았지만, 그렇다면 일부 String 관련 예제로 내 대답을 바꿀 것입니다. – Jorn
문자열은 Java의 특수한 시민입니다. 정확히 기본 유형은 아니지만 클래스로 간주 할 수도 없습니다. String은 + 연산자를 오버로드하는 유일한 클래스입니다. 두 개의 문자열을 추가하면 새로운 문자열이 생깁니다. 정규 클래스에서는 연산자 오버로딩을 허용하지 않습니다. – kgiannakakis
문자열을 클래스로 간주 할 수 없다 ??? –