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 검사
- 과다 누락 된 @Override 주석
- 매개 변수에 대한 paramAssign 할당
- pkgDefaultMethod가 패키지 기본 메소드를 대체하려고 시도 함
- 매개 변수 유형 대신 원시 유형의 원시 사용법
- 세미콜론 불필요한 세미콜론 또는 빈 명령문
- 시리얼 누락 serialVersionUID
- specialParamHiding 생성자 또는 다른 필드를 숨기는 setter 매개 변수
- indirectStatic 및 staticReceiver 용 정적 액세스 매크로
- 정적 필드를 가져 오거나 정적 메소드를 호출하는 데 비 정적 수신자가 사용되는 경우 staticReceiver
- 수퍼 호출없이 메소드를 오버라이드
- 억제 @SuppressWarnings 가능
- innerclass에 대한 합성 액세스를 수행 할 때 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가 선택한 경고를 기반으로 선택하므로 추가 할 주석을 추측 할 필요가 없습니다.
그리고 이것은 훨씬 더 완전한 목록 인 것 같습니다. 여기서 다른 곳에서는 찾을 수없는 Android-Studio 관련 경고가 발견되었습니다 (예 : SynchronizeOnNonFinalField)
https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html
오, 이제 SO의 가이드 라인은 SO의 제한을 contraddict합니다. 한편으로는 링크 만 제공하는 대신 목록을 복사해야합니다. 그러나 다른 한편으로는 최대 허용 문자 수를 초과합니다. 링크가 끊어지지 않기를 바랍니다.
JSL 1.7
오라클 설명서 에는 다음이 언급되어 있습니다.
unchecked
: 확인되지 않은 경고는 "확인되지 않은"문자열로 식별됩니다.deprecation
: Java Deprecated 주석으로 주석이 지정된 유형, 메소드, 필드 또는 생성자를 사용할 때 (예 : 대체, 호출 또는 이름으로 참조) Java 컴파일러는 다음과 같은 경우를 제외하고 사용 중단 경고를 생성해야합니다. [...] @SuppressWarnings ( "deprecation") 주석으로 경고를 억제하기 위해 주석이 달린 엔티티 내에 사용됩니다. 또는
그런 다음 구현이 자체적으로 추가하고 문서화 할 수 있다고 설명합니다.
컴파일러 공급 업체는이 주석 유형과 함께 지원하는 경고 이름을 문서화해야합니다. 공급 업체는 동일한 이름이 여러 컴파일러에서 작동하도록 협력하는 것이 좋습니다.
https://gist.github.com/vegaasen/157fbc6dce8545b7f12c 에 IntelliJ 억제 매개 변수의 마스터 목록이 있음을 추가하고 싶습니다.
상당히 포괄적으로 보입니다. 부분 :
Warning Description - Warning Name
"Magic character" MagicCharacter
"Magic number" MagicNumber
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString
'String.equals("")' StringEqualsEmptyString
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation
'assert' statement AssertStatement
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes
'await()' not in loop AwaitNotInLoop
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal
'break' statement BreakStatement
'break' statement with label BreakStatementWithLabel
'catch' generic class CatchGenericClass
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone
IntelliJ//noinspection
에서 자동 생성 될 수 있음을 알았습니다.
@SuppressWarninigs
진술 전에 계획이 없는지 확인하십시오- 이제 경고를 선택한 경우 Alt + Enter를 눌러 특정 항목
//noinspection
을 자동 생성 한 다음 오른쪽 화살표 키 를 사용 하여 Suppress for ... 옵션 을 볼 수 있습니다.
IntelliJ의 "스위치에 케이스 레이블이 너무 적습니다"경고를 표시하지 않으려 고 여기에서 종료되었습니다. IntelliJ의 @SuppressWarning
지원에 대한 완전한 목록을 //noinspection
찾지 못했지만 나를 위해 속임수를 사용했습니다.
SonarLint를 사용하는 경우 메소드 위 또는 전체 오징어 문자열을 분류하십시오. @SuppressWarnings ( "squid : S1172")
'IT story' 카테고리의 다른 글
Keras LSTM 이해 (0) | 2020.04.06 |
---|---|
Chrome devtools의 교차 스타일 속성은 무엇을 의미합니까? (0) | 2020.04.06 |
키로 해시 정렬, 루비에서 해시 반환 (0) | 2020.04.06 |
엔티티 프레임 워크 코드 첫 번째-동일한 테이블에서 두 개의 외래 키 (0) | 2020.04.06 |
포인터 대 참조 (0) | 2020.04.06 |