효과적인 자바! 재정의 주석을 일관되게 사용
@Override
주석입니다. 이 주석은 매우 간단하지만 일부 버그를 피하고 일부 결함을 컴파일 타임에 푸시하고 프로세스 후반에 푸시하는 데 도움이 됩니다. 요점을 설명하기 위해 다음 예를 살펴보겠습니다.public class Bigram {
private final char first;
private final char second;
public Bigram(char first, char second) {
this.first = first;
this.second = second;
}
public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
public hashcode() {
return 31 * first + second;
}
public static void main(String[] args) {
Set<Bigram> s = new HashSet<>();
for (int i = 0; i < 10; i++) {
for (char ch = 'a'; ch <= 'z'; ch++) {
s.add(new Bigram(ch, ch));
}
}
System.out.println(s.size());
}
}
이 코드는 소문자 알파벳을 반복하고
Bigram
와 동일한 문자 두 개를 세트에 추가합니다. 이 작업을 10회 반복합니다. 동일한 작업을 반복해서 수행하고 결과를 세트에 넣고 복제본은 세트에 넣을 수 없기 때문에 크기가 26이 될 것으로 예상할 수 있지만 실제로는 260개의 요소로 끝납니다. 중복 삽입이 허용된 이유를 알 수 있습니까? 이 코드의 작성자는 확실히 기본 클래스 Object
의 equals
기능을 재정의하려고 했지만 불행히도 서명을 엉망으로 만들었습니다. 이는 작성자가 equals
함수를 재정의하지 않고 재정의했기 때문입니다. 그것을 재정의하려면 함수가 Object
가 아니라 Bigram
를 취해야 합니다.여기에서
@Override
주석을 사용할 수 있습니다. 코드 작성자가 컴파일 시간에 메서드에 이 주석을 추가했다면 컴파일러는 재정의할 메서드가 없다는 오류를 발생시켰을 것입니다.초기 컴파일 중에
@Override
주석의 이점을 대부분 얻을 수 있습니다. 그러나 그 이상은 여전히 사용할 수 있습니다. IDE는 이 정보를 사용하여 코드에 정보를 추가하고 안전한 방식으로 개발할 수 있습니다. 마지막으로, 어떤 메서드가 재정의되고 어떤 메서드가 그렇지 않은지 미래 개발자와 통신하는 문제로 사용할 수 있습니다.요약하면, 함수를 재정의할 때 항상
@Override
주석으로 해당 함수에 주석을 달아야 합니다. 이것은 당신이 작성하는 클래스의 더 나은 안전성과 문서화를 제공할 것입니다.
Reference
이 문제에 관하여(효과적인 자바! 재정의 주석을 일관되게 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kylec32/effective-java-consistently-use-the-override-annotation-10lo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)