[java] Java에서 유효한 @SuppressWarnings 경고 이름 목록은 무엇입니까?
@SuppressWarnings
Java에서 유효한 경고 이름 목록은 무엇입니까 ?
사이에 제공되는 비트 ("")
에서 @SuppressWarnings("")
.
답변
IDE 또는 컴파일러에 따라 다릅니다.
Eclipse Galileo 의 목록 은 다음과 같습니다 .
- 모든 경고를 표시하지 않습니다
- 권투 / 박스 해제 작업과 관련된 경고를 표시하지 않는 권투
- 캐스트 작업과 관련된 경고를 표시하지 않는 캐스트
- 더 이상 사용되지 않는 주석과 관련된 경고를 표시하지 않는 dep-ann
- 지원 중단 과 관련하여 경고를 표시하지 않는 지원 중단
- 위해 fallthrough switch 문에없는 틈을 기준으로 억제하는 경고
- 마지막 으로 반환되지 않는 finally 블록과 관련된 경고를 표시하지 않습니다.
- 숨어 지역 주민들이 상대적 억제 경고를 숨기기 변수
- 불완전한 스위치 스위치 문에서 누락 된 항목과 관련된 경고를 표시하지 않음 (열 경우)
- nls 가 아닌 문자열 리터럴과 관련된 경고를 억제하는 nls
- null 분석과 관련된 경고를 표시하지 않으려면 null
- 권장하지 않거나 금지 된 참조의 사용과 관련하여 경고를 억제하는 제한
- serializable 클래스에 대한 serialVersionUID 필드가 누락되어 경고를 표시하지 않는 serial
- 정전기에 액세스 잘못된 정적 액세스를 기준으로 억제 경고에
- 내부 클래스의 최적화되지 않은 액세스와 관련된 경고를 억제하는 합성 액세스
- 확인되지 않은 작업과 관련된 경고를 표시하지 않으려면 확인하지 않음
- 규정되지 않은 필드 액세스 권한이없는 필드 액세스와 관련된 경고를 표시하지 않는
- 사용하지 않는 코드와 관련된 경고를 표시 하지 않으려면 사용되지 않음
인디고 추가 목록 :
- javadoc 경고와 관련된 경고를 억제하는 javadoc
- rawtypes 상대 원시 타입의 사용을 억제 경고에
- static 으로 선언 될 수있는 메소드와 관련하여 경고를 표시하지 않는 static 메소드
- 수퍼 호출없이 메소드를 대체 할 때 경고를 표시하지 않는 수퍼
Juno 추가 목록 :
- 자원 유형 닫기 가능한의 자원의 사용을 기준으로 억제 경고에
- 동기화 된 메소드를 대체 할 때 동기화 누락으로 인해 경고를 표시하지 않는 동기화 대체
Kepler 및 Luna는 Juno ( list ) 와 동일한 토큰 목록을 사용합니다 .
다른 것들은 비슷하지만 다양 할 것입니다.
답변
모든 값이 허용됩니다 (인식되지 않은 값은 무시 됨). 인식되는 목록은 컴파일러마다 다릅니다.
에서 자바 튜토리얼 unchecked
및 deprecation
Java 언어 사양에서 요구하는 두 개의 경고로 표시됩니다, 따라서 그들은 모두 컴파일러로 유효해야합니다 :
모든 컴파일러 경고는 범주에 속합니다. Java 언어 사양에는 더 이상 사용되지 않는 항목과 선택되지 않은 항목의 두 가지 범주가 있습니다.
Java 언어 사양 에서 정의 된 특정 섹션 은 버전간에 일관성이 없습니다. 자바 SE 8 사양에서 unchecked
와 deprecation
섹션의 컴파일러 경고로 나열됩니다 9.6.4.5. @SuppressWarnings 및 9.6.4.6 @Deprecated .
Sun 컴파일러의 경우 running javac -X
은 해당 버전에서 인식되는 모든 값 목록을 제공합니다. 1.5.0_17의 경우 목록은 다음과 같습니다.
- 모두
- 천칭
- 확인되지 않은
- 실패로 끝나다
- 통로
- 연속물
- 드디어
답변
목록은 컴파일러마다 다릅니다. 그러나 Eclipse 에서 지원되는 값은 다음과 같습니다.
- 더 이상 사용되지 않는 코드 내에서도 더 이상 사용되지 않습니다.
- allJavadoc이 유효하지 않거나 누락 된 javadoc
- assertIdentifier 식별자로 사용 된 assert 발생
- 권투 오토 박싱 변환
- charConcat 문자 배열을 문자열로 변환되지 않고 명시 적 문자열 연결에 사용될 때
- 조건 우연한 부울 할당 가능
- 생성자 이름이있는 constructorName 메소드
- dep-ann에 @Deprecated 주석이 없습니다.
- 더 이상 사용되지 않는 유형 또는 더 이상 사용되지 않는 코드 외부의 멤버 사용 중단
- 권장되지 않은 액세스 규칙과 일치하는 유형의 사용을 권장하지 않습니다
- emptyBlock 문서화되지 않은 빈 블록
- enumSwitch , 불완전한 스위치 불완전한 열거 형 스위치
- 위해 fallthrough 가능한 경우 위해 fallthrough
- fieldHiding 다른 변수를 숨기는 필드
- final 바운드가있는 finalBound 유형 매개 변수
- 마지막 으로 정상적으로 완료되지 않는 블록
- 금지 된 액세스 규칙과 일치하는 유형의 금지 된 사용
- fieldHiding, localHiding, typeHiding 및 maskedCatchBlock에 대한 매크로 숨기기
- 정적 멤버에 대한 indirectStatic 간접 참조
- 수퍼 인터페이스로 사용되는 intfAnnotation 주석 타입
- intfNonInherited 인터페이스 상속되지 않은 메소드 호환성
- javadoc 유효하지 않은 javadoc
- localHiding 다른 변수를 숨기는 지역 변수
- maskedCatchBlocks 숨겨진 캐치 블록
- nls 비 nls 문자열 리터럴 (태그 없음 // $ NON-NLS-)
- noEffect 효과가없는 할당 할당
- 널 가능성 누락 또는 중복 널 점검
- nullDereference 누락 null 검사
- 초과 무효 누락 @ 재정의 주석
- 매개 변수에 대한 paramAssign 할당
- pkgDefaultMethod가 패키지 기본 메소드를 대체하려고 시도 함
- 원시 사용법 a (매개 변수화 된 유형 대신) 원시 유형
- 세미콜론 불필요한 세미콜론 또는 빈 명령문
- 시리얼 누락 serialVersionUID
- specialParamHiding 생성자 또는 다른 필드를 숨기는 setter 매개 변수
- indirectStatic 및 staticReceiver 용 정적 액세스 매크로
- 정적 필드를 가져 오거나 정적 메소드를 호출하는 데 비 정적 수신자가 사용되는 경우 staticReceiver
- 수퍼 호출없이 메소드를 오버라이드
- 억제 @SuppressWarnings 가능
- 내부 클래스에 대한 합성 액세스를 수행 할 때 syntheticAccess, 합성 액세스
- tasks 는 소스 코드에서 tasks 태그를 지원합니다
- 다른 유형을 숨기는 typeHiding 유형 매개 변수
- 확인 되지 않은 확인 되지 않은 유형 작업
- 불필요한 else else 절
- 규정되지 않은 필드 액세스, 규정 되지 않은 필드 규정 되지 않은 필드 참조
- 미사용 인수에 대한 미사용 매크로
- unusedArgument 하지 않는 방법 인수
- unusedImport 되지 않는 수입 참조
- unusedLabel 하지 않는 라벨
- unusedLocal 않는 로컬 변수
- 비공개 미사용 개인 멤버 선언
- unusedThrown 되지 않는 선언 발생한 예외
- uselessTypeCheck 불필요한 캐스트 / instanceof를 작동
- varargsCast varargs 인수에는 명시 적 캐스트가 필요합니다
- @SuppressWarnings의 warningToken 처리되지 않은 경고 토큰
Sun JDK (1.6)에는 지원되는 경고 목록 이 더 짧습니다 .
- 사용 중단 감가 상각 항목의 사용을 확인합니다.
- unchecked Java 언어 사양에서 요구하는 확인되지 않은 변환 경고에 대한 자세한 정보를 제공하십시오.
- serial serializable 클래스에서 serialVersionUID 정의가 누락되었음을 경고합니다.
- finally 정상적으로 완료 할 수없는 finally 절에 대해 경고합니다.
- 폴 스루 폴 스루 사례에 대한 스위치 블록을 확인하고 발견 된 경우 경고 메시지를 제공합니다.
- path 환경 경로에 존재하지 않는 경로 (예 : classpath)를 확인하십시오.
Mac 용으로 사용 가능한 최신 javac (1.6.0_13)에는 다음과 같은 지원되는 경고가 있습니다.
- 모두
- 캐스트
- 천칭
- divzero
- 빈
- 확인되지 않은
- 실패로 끝나다
- 통로
- 연속물
- 드디어
- 재정의
답변
나에게 가장 좋아하는 것은 @SuppressWarnings("WeakerAccess")
IntelliJ에 있으며, 사용하는 것보다 액세스 수정자가 약해야한다고 생각할 때 불평하지 않습니다. 테스트를 지원하기 위해 일부 메소드에 대한 공개 액세스 권한이 있어야하며 @VisibleForTesting
주석이 경고를 막지 않습니다.
ETA : “익명”은 @MattCampbell 링크 된 페이지에서 다음과 같은 매우 유용한 참고 사항을 언급했습니다.
설명하려는 목적으로이 목록을 사용할 필요는 없습니다. 요청하면 IntelliJ가 SuppressWarnings를 자동으로 추가합니다. 내가 기억하는 것처럼 많은 릴리스 에서이 작업을 수행 할 수있었습니다.
경고가있는 위치로 이동하여 Alt-Enter를 입력하십시오 (또는 검사 목록에서 경고를 선택하십시오). 메뉴가 나타나면 경고를 표시하고 수정을 제공하는 오퍼링이 표시됩니다 (예 : 경고가 “메소드가 정적 일 수 있습니다”인 경우 “정적”은 IntellJ가이를 대신하여 제공합니다). 오른쪽 화살표 버튼을 사용하여 “검사 프로필 설정 편집”등과 같은 옵션이있는 하위 메뉴에 액세스하십시오. 이 목록의 맨 아래에는 “클래스에 대한 모든 검사 억제”, “클래스에 대한 억제”, “방법에 대한 억제”및 때때로 “구문에 대한 억제”와 같은 옵션이 있습니다. 당신은 아마 이들 중 하나가 목록의 마지막에 나타날 것을 원할 것입니다. 이 중 하나를 선택하면 해당 경고를 억제하는 @SuppressWarnings 주석 (또는 경우에 따라 주석)이 코드에 추가됩니다. IntelliJ가 선택한 경고를 기반으로 선택하므로 추가 할 주석을 추측 할 필요가 없습니다.
답변
IntelliJ//noinspection
에서 자동 생성 될 수 있음을 알았습니다.
@SuppressWarninigs
진술 전에 계획이 없는지 확인하십시오- 이제 경고를 선택한 경우 Alt + Enter를 눌러 특정 항목
//noinspection
을 자동 생성 한 다음 오른쪽 화살표 키 를 사용 하여 Suppress for … 옵션 을 볼 수 있습니다.
IntelliJ의 “스위치에 케이스 레이블이 너무 적습니다”경고를 표시하지 않으려 고 여기에서 종료되었습니다. IntelliJ의 @SuppressWarning
지원에 대한 완전한 목록을 //noinspection
찾지 못했지만 나를 위해 속임수를 사용했습니다.
답변
그리고 이것은 훨씬 더 완전한 목록 인 것 같습니다. 여기서 다른 곳에서는 찾을 수없는 Android-Studio 관련 경고를 발견했습니다 (예 : SynchronizeOnNonFinalField)
https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html
아, 이제 SO의 가이드 라인은 SO의 제한을 준수합니다. 한편으로는 링크 만 제공하는 대신 목록을 복사해야합니다. 그러나 다른 한편으로는 최대 허용 문자 수를 초과합니다. 링크가 끊어지지 않기를 바랍니다.
답변
JSL 1.7
오라클 설명서 에는 다음이 언급되어 있습니다.
unchecked
: 확인되지 않은 경고는 “확인되지 않은”문자열로 식별됩니다.deprecation
: Java Deprecated 주석으로 주석이 지정된 유형, 메소드, 필드 또는 생성자를 사용할 때 (예 : 대체, 호출 또는 이름으로 참조) Java 컴파일러는 다음과 같은 경우를 제외하고 사용 중단 경고를 생성해야합니다. […] @SuppressWarnings ( “deprecation”) 주석으로 경고를 억제하기 위해 주석이 달린 엔티티 내에 사용됩니다. 또는
그런 다음 구현이 자체적으로 추가하고 문서화 할 수 있다고 설명합니다.
컴파일러 공급 업체는이 주석 유형과 함께 지원하는 경고 이름을 문서화해야합니다. 공급 업체는 동일한 이름이 여러 컴파일러에서 작동하도록 협력하는 것이 좋습니다.