Java에서 클래스를 변경할 수 없다고 어떻게 주석을 달아야합니까?


14

나는 최근에 불변의 객체가 얼마나 유용한 지에 대해 비 틀었습니다. 예를 들어 요소를 생성자에 전달하고 클래스가 불변이어야하는 경우, 불변이 아닌 경우 이러한 요소를 복사해야합니다.

프로젝트에 대해 많은 점검이나 지식이 필요합니다.

public A(B foo)

그리고 B, 불변 아닌 A내가 복사해야 할 것이다 B. 이제는 B불변 인 것처럼 보이지만 그 자체에는 생성자 등에서 변경 가능한 클래스가 있습니다.

Java에서 클래스를 변경할 수없는 경우 문서화에 대한 표준 또는 모범 사례가 있습니까? @immutableJavadoc에 키워드 가없는 것 같습니다 .

@Immutable 주석은 완전히 자동 클래스 생성을위한 다른 표준 자바의 일부가 뭔가 것 같다.


2
첫째, 방어 복사를 통해 문제를 해결할 수 있습니다. 둘째, 문서화 할 수있는 방법은 클래스의 Javadoc입니다
raptortech97

"문서화하는 방법은 클래스 Javadoc이다"이것을하는 표준적인 방법이 있습니까? 그렇다면 이것은 이미 받아 들여진 대답 일 것입니다.
Aufziehvogel

@ raptortech97 불변 클래스의 주요 장점 중 하나는 방어 카피 가 필요하지 않다는 것입니다 . 불변의 것으로 의심되는 물체를 방어 적으로 복사해야한다면 잘못하고있는 것입니다.
itsbruce

1
@itsbruce 그는 가변 객체를 복사하는 것에 대해 이야기하고있었습니다. 또한 불변 개체를 복사해야하는 이유 중 하나는 캐시 위치입니다. 일부 가비지 수집기는 개체의 상대적 순서를 유지하므로 함께 할당 된 개체는 함께 유지됩니다.
Doval

네가 옳아. 내 잘못이야.
itsbruce

답변:


7

String수업 문서를 살펴보십시오 (굵은 글씨는 내가 한 일입니다).

String 클래스는 문자열을 나타냅니다. "abc"와 같은 Java 프로그램의 모든 문자열 리터럴은이 클래스의 인스턴스로 구현됩니다. 문자열은 일정합니다. 값을 만든 후에는 변경할 수 없습니다. 문자열 버퍼는 변경 가능한 문자열을 지원합니다. String 객체는 변경할 수 없으므로 공유 할 수 있습니다.

보시다시피, 특정 레이블 또는 다른 마커는 없지만 클래스를 설명하는 JavaDoc에서 클래스가 String상수의 불변 개체를 나타냅니다.

따라서, 당신의 지침 따라 가정 불변 클래스를 생성하는 오라클 자습서를, 클래스의 불변성이 문서화되어 있는지 확인하기 위해, 당신은 단지 당신이 클래스와 무엇을 설명하는의 JavaDoc에 그것에서 언급해야한다 그렇습니다.

그래도 여전히 필요한 내용에 맞지 않으면 여기에서 사용자 정의 JavaDoc 태그를 빌드하는 방법을 살펴볼 수 있습니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.