2010-12-01 4 views
4

@Override 주석을 지정하지 않고 수퍼 클래스 메서드를 재정의하는 클래스가있을 때 Java 빌드가 실패하려고합니다.javac -Xlint : overrides not working

빌드는 개미를 통해 이루어지고, 나는 내 <javac> 작업에 다음과 같은 요소를 추가했습니다 :

<compilerarg value="-Werror"/> 
<compilerarg value="-Xlint:unchecked,overrides"/> 

unchecked 옵션은 다음되고 있지만, overrides 옵션은 무시되고있다. 또한 두 개의 Xlint 옵션을 두 개의 개별 <compilerarg> 요소로 분리하여 사용하지 않으려 고 시도했습니다. 이 옵션이하는 일을 오해하고 있습니까?

한 메모 : MacOSX (10.6)의 JDK6입니다. OSX 관련 버그가있을 수 있습니까?

+0

내 OS X 컴퓨터에서 잘 작동합니다. 나는 여기에 오버라이드 예제로 테스트했다 : http://www.javaworld.com/community/node/5276 javac 1.6.0_22 –

+0

IntelliJ IDEA를 사용하는 경우 정확히 이것을 수행 할 수있는 검사가 있지만 기본적으로 활성화되어 있지 않다. , 설정> 검사> 누락 된 주석 무시 –

답변

4

나는 당신이 Xlint:overrides의 행동을 오해하고 있다고 생각합니다.

필자가 아는 바에 따르면 실제로 수퍼 클래스 메서드를 오버라이드하지 않는 @Override이라는 주석이 붙은 메서드를 발견하면 컴파일러가 경고를 내 보낸다. 그러나 오버라이드 된 모든 메소드에 주석이 올바르게 작성되었는지 확인하지는 않습니다.

편집 : 방금 테스트했습니다. Xlint 옵션을 포함하거나 포함하지 않고 수퍼 클래스 메서드를 재정의하지 않는 메서드에서 @Override을 지정하면 컴파일러에서 오류가 발생합니다.

문서에 Oracle's website은 Xlint : overrides 옵션조차 언급하지 않았으므로 구현되지 않았다고 추측합니다.

+0

로 가셔도됩니다. 그 질문에 대한 답변입니다. 이제 오버로드 된 메소드에 @Override가 없을 때 내 빌드를 실패하게 만드는 방법을 알아야합니다 ... –

+0

Findbugs 또는 Checkstyle에 이런 종류의 오류가 발생하지 않을 수도 있다고 생각합니다. 단지 막연하게 기억해, 내가 틀릴 수도있어. 어딘가에 도구가 될 수 밖에 없습니다. –

+0

@CameronSkinner 방금 Findbugs와 Checkstyle을 살펴 보았지만 그와 같은 검사는 없었습니다. Checkstyle에는 MissingOverride 검사가 있지만 "{@inheritDoc} javadoc 태그가있을 때 java.lang.Override 주석이 존재하는지 확인"만되므로 문서를 잊어 버린 경우에는 작동하지 않습니다. – Eponymous

0

Xlint : 재정의는 @Override보다 미묘합니다. @Override (Cameron Skinner가 지적한 것처럼)는 다른 메소드를 실제로 오버라이드하지 않는 메소드에 주석을 달면 컴파일러에 의해 에러가 발생합니다. 그러나 Xlint : overrides 옵션은 varargs 매개 변수가있는 메소드를 표시하여 varargs 매개 변수가없고 대신 배열을 사용하는 다른 메소드를 대체하는 경우 경고를 표시합니다. 여기에 좋은 설명이 있습니다.

http://marxsoftware.blogspot.com/2010/10/javacs-xlint-options.html