[java] Java에서 유효한 @SuppressWarnings 경고 이름 목록은 무엇입니까?

@SuppressWarningsJava에서 유효한 경고 이름 목록은 무엇입니까 ?

사이에 제공되는 비트 ("")에서 @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 ) 와 동일한 토큰 목록을 사용합니다 .

다른 것들은 비슷하지만 다양 할 것입니다.


답변

모든 값이 허용됩니다 (인식되지 않은 값은 무시 됨). 인식되는 목록은 컴파일러마다 다릅니다.

에서 자바 튜토리얼 uncheckeddeprecationJava 언어 사양에서 요구하는 두 개의 경고로 표시됩니다, 따라서 그들은 모두 컴파일러로 유효해야합니다 :

모든 컴파일러 경고는 범주에 속합니다. Java 언어 사양에는 더 이상 사용되지 않는 항목과 선택되지 않은 항목의 두 가지 범주가 있습니다.

Java 언어 사양 에서 정의 된 특정 섹션 은 버전간에 일관성이 없습니다. 자바 SE 8 사양에서 uncheckeddeprecation섹션의 컴파일러 경고로 나열됩니다 9.6.4.5. @SuppressWarnings9.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”) 주석으로 경고를 억제하기 위해 주석이 달린 엔티티 내에 사용됩니다. 또는

그런 다음 구현이 자체적으로 추가하고 문서화 할 수 있다고 설명합니다.

컴파일러 공급 업체는이 주석 유형과 함께 지원하는 경고 이름을 문서화해야합니다. 공급 업체는 동일한 이름이 여러 컴파일러에서 작동하도록 협력하는 것이 좋습니다.