인터페이스 메소드에서 Eclipse가 @Override에 대해 불평하는 이유는 무엇입니까?


134

수퍼 클래스 메소드가 아닌 인터페이스 메소드 @Override를 대체하는 메소드 를 사용하는 기존 프로젝트가 있습니다. 코드에서 이것을 변경할 수는 없지만 Evenpse는 여전히 Maven으로 빌드 할 수 있기 때문에 주석에 대한 불평을 중단하고 싶습니다.

이 오류를 비활성화하려면 어떻게해야합니까?

참고 : 프로젝트 요구 사항으로 인해 Java 1.5 용으로 컴파일해야합니다.


그러나 소스가 Java 6을 대상으로하는 것 같습니다.
akarnokd

과연. Java 5는 Mac 지원에 대한 최신 요구 사항이었습니다.
Stefan Kendall

답변:


268

@Override인터페이스가 선언 한 메소드를 구현하는 메소드에 주석을 사용하는 것은 Java 6부터 유효합니다. Java 5의 오류입니다.

IDE 프로젝트가 Java 6 JRE를 사용하도록 설정되어 있고 "소스 호환성"이 1.6 이상으로 설정되어 있는지 확인하십시오.

  1. 창> 환경 설정 대화 상자를여십시오.
  2. Java> 컴파일러를 찾아보십시오.
  3. "컴파일러 준수 수준"을 1.6으로 설정하십시오.

Eclipse는 특정 프로젝트에 대한 이러한 전역 설정을 무시할 수 있으므로 해당 설정도 확인하십시오.


최신 정보:

Java 5의 오류는 Eclipse에서만 발생하는 것이 아닙니다. javac명령 행에서 직접 사용 하면 동일한 오류가 발생합니다. 유효한 Java 5 소스 코드가 아닙니다.

그러나 -target 1.5JDK 6 옵션을 지정할 수 있습니다 javac. 그러면 Java 6 소스 코드에서 Java 5 버전 클래스 파일이 생성됩니다.


아뇨. "javac : 소스 릴리스 1.6에 대상 릴리스 1.6이 필요합니다"라는 오류 메시지가 표시됩니다.
Michael Borgwardt

9
아뇨. 컴파일 된 클래스 파일을 생성합니다. -source 1.6 옵션을 지정하면이 오류가 발생하는데,이 작업을 수행하는 데 필요하지 않습니다.
erickson 2016 년

어쨌든 수동으로 빌드하기 때문에 소스 레벨을 1.6으로 유지할 수 있습니다. 어떤 종류의 혼합 구성도 작동시킬 수 없었으며 이것이 가장 단순 해 보입니다.
Stefan Kendall

@erickson -target -source downgrade도 1.7에서 1.6으로 작동합니까? stackoverflow.com/q/8869869/632951
Pacerier

1.8 JDK에서는 작동하지 않는 것 같습니다. -source 1.6 -target 1.5의 말 : javac : 소스 릴리스 1.6에 대상 릴리스 1.6이 필요함
Don Hatch

39

다음과 같이하십시오 :

프로젝트-> 속성-> Java 컴파일러->

  • 프로젝트 특정 설정 사용- '예'
  • 컴파일러 준수-1.6
  • 생성 된 클래스 파일 및 소스 호환성-1.5

감사합니다-각 프로젝트마다 자체 설정이 있다는 것을 몰랐습니다
whostolemyhat

2
내 경우에는이 옵션을 비활성화해야했습니다.
Muten Roshi

12

프로젝트에 패싯이 있는지 확인하십시오. Java 버전이 대체 될 수 있습니다.


1
점수! 내 프로젝트 패싯이 글로벌 컴플라이언스 설정을 재정의하고있었습니다. 감사!
bpawlowski

9

프로젝트 별 설정이 활성화 될 수 있습니다. 프로젝트 선택 Project > Properties > Java Compiler, 또는 변경 하고 위의 해당 잊고하지 . 그렇지 않은 작업을 수행 못했을 경우에 대비, 삭제, 이클립스에서 프로젝트를 제거 , , 파일을. 일식. 그것은 나를 위해 일했다uncheckEnable project specific settingsJdk 1.6JRE
.settings folders.project.classpathclean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your project


7

컴파일러 설정을 변경하여 Java 6 구문을 허용하지만 Java 5 출력을 생성 할 수 있습니다 (기억하십시오). 런타임에 필요한 경우 "생성 된 클래스 파일 호환성"을 약간 낮게 설정하십시오. 업데이트 : Eclipse를 확인했지만 소스 호환성을 1.6으로, 클래스 호환성을 1.5로 설정하면 불평합니다. 1.6이 허용되지 않으면 일반적으로 소스에서 문제가되는 @Override 주석을 수동으로 주석 처리합니다 (귀하의 경우에는 도움이되지 않음).

업데이트 2 : 수동 빌드 만하는 경우 원래 프로젝트를 새 프로젝트로 복사하고 Java 소스에서 @Override 주석을 제거하고 Eclipse에서 프로젝트 정리를 누르는 작은 프로그램을 작성할 수 있습니다.


구체적인 정보를 제공 할 수 있습니까?
Stefan Kendall

이 페이지는 erickson이 언급 한 것과 같은 페이지에 있습니다.
akarnokd

프로젝트는 몇 GB가 큽니다. 단순한 "복사"는 실용적이지 않습니다. : /
Stefan Kendall 2016 년

이 경우 변경 권한을 요청해야합니다. 또는 1.5 호환 소스에 대한 분기를 작성하고 수동으로 Java 파일을 수정하십시오.
akarnokd

1

Retroweaver를 사용하여 Java6 클래스에서 Java5 버전을 작성할 수도 있습니다.


1

Eclipse를 사용하여 "@Override"의 모든 인스턴스를 검색하고 바꾸십시오 (제거). 그런 다음 "클린업"을 사용하여 비 인터페이스 재정의를 다시 추가하십시오.

단계 :

  1. 소스 파일이 포함 된 프로젝트 또는 폴더를 선택하십시오.
  2. "검색> 검색 ..."(Ctrl-H)으로 이동하여 검색 대화 상자를 불러옵니다.
  3. "파일 검색"탭으로 이동하십시오.
  4. "텍스트 포함"에 "@Override"를 입력하고 "파일 이름 패턴"에 "* .java"를 입력하십시오. "@Override"의 모든 인스턴스를 제거하려면 "Replace ..."를 클릭 한 다음 "OK"를 클릭하십시오.
  5. "창> 환경 설정> Java> 코드 스타일> 정리"로 이동하여 새 프로파일을 작성하십시오.
  6. 프로필을 수정하고 "없는 코드> 누락 된 주석 추가> @ 재정의"를 제외한 모든 항목의 선택을 취소하십시오. "인터페이스 메소드 구현"이 선택 취소되어 있는지 확인하십시오.
  7. 소스 파일이 포함 된 프로젝트 또는 폴더를 선택하십시오.
  8. "소스> 정리 ..."(Alt + Shift + s, u)를 선택한 다음 "마침"을 선택하여 비 인터페이스 재정의를 다시 추가하십시오.

0

문제를 이해했습니다. jdk를 jdk에서 1.5 이상으로 변경하십시오.


0

IDE 프로젝트가 Java 6 JRE 이상을 사용하도록 설정되도록 구성하면 때때로 Eclipse 오류가 제거되지 않습니다. 나를 위해 Eclipe IDE를 다시 시작 하는 데 도움이되었습니다.


0

Windows 탭에서 컴파일러 준수 설정을 1.6 또는 1.7로 변경 한 다음 우선 순위, Java, 컴파일러 및 컴파일러 준수 설정을 변경 한 후에도 여전히이 문제가 발생했습니다. 아이디어는 프로젝트 폴더로 이동하여 마우스 오른쪽 버튼을 클릭하고 Java를 컴파일하고 컴파일러 준수를 1.6 이상으로 설정해야한다는 것입니다. 이것은 나를 위해 일했습니다.

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