Java 컴파일 오류/경고 환경 설정

오류/경고 환경 설정 페이지 열기 Java > 컴파일러 > 오류/경고 환경 설정 페이지에 오류/경고 설정에 대한 환경 설정을 표시하십시오.

코드 스타일

옵션

설명

기본값

Static 멤버에 대한 비정적 액세스

사용할 경우, 컴파일러는 표현식 수신기를 사용하여 static 필드 또는 메소드에 액세스할 때마다 오류 또는 경고를 발행합니다. Static 멤버 참조는 유형 이름으로 규정해야 합니다.

경고

Static 멤버에 대한 간접 액세스

이 옵션을 사용하는 경우, 컴파일러는 static 필드 또는 메소드에 간접 방식으로 액세스할 때마다 오류 또는 경고를 발행합니다. 인터페이스의 static 필드는 유형 이름 선언으로 규정되어야 합니다.

무시

인스턴스 필드에 대한 규정되지 않은 액세스

사용할 경우, 컴파일러는 규정되지 않은 필드 액세스(예: 'this' 누락)가 발생할 때마다 오류 또는 경고를 발행합니다.

무시

엔클로징 유형의 액세스 불가능한 멤버에 대한 액세스

사용할 경우, 컴파일러는 엔클로징 유형의 액세스가 가능하지 않은 멤버에 액세스를 에뮬레이트할 때마다 오류 또는 경고를 발행합니다. 이 같은 액세스는 성능 함축을 가질 수 있습니다.

무시

매개변수 지정

매개변수에 값을 지정하는 것은 일반적으로 좋지 않은 스타일 프로그램으로 간주됩니다. 이 옵션을 사용할 경우 오류 또는 경고와 같은 시나리오가 발생하면 컴파일러가 신호를 보냅니다.

무시

구체화되지 않은 문자열

사용할 경우, 컴파일러는 구체화되지 않은 문자열 리터럴(예: //$NON-NLS-<n>$로 태그되지 않음) 또는 문자열에 속하지 않은 구체화되지 않은 문자열에 대해 오류 또는 경고를 발행합니다.

무시

문서화되지 않은 빈 블록

이 옵션을 사용하는 경우, 컴파일러는 설명 주석이 없는 빈 블록 명령문을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

try-with-resource를 통해 관리되지 않은 자원(1.7 이상)

사용 가능한 경우 로컬 변수가 유형 'java.lang.AutoCloseable'의 값을 보유하는 경우 및 메소드 'close()'가 명시적으로 해당 자원에서 호출되었지만 try-with-resources 블록으로 자원이 관리되지 않는 경우 컴파일러가 오류 또는 경고를 발행합니다.

무시

생성자 이름이 있는 메소드

생성자 이름으로 메소드를 이름 지정하는 것은 일반적으로 좋지 않은 프로그래밍 스타일입니다. 이 옵션을 사용할 경우 오류 또는 경고와 같은 시나리오가 발생하면 컴파일러가 신호를 보냅니다.

경고

메소드가 static일 수 있음

사용할 경우, 컴파일러가 private이거나 final인 메소드 및 Static 멤버만 참조하는 메소드에 대해 오류 또는 경고를 발행합니다.

무시

메소드가 잠재적으로 static일 수 있음

사용할 경우, 컴파일러가 private이나 final이 아닌 메소드 및 Static 멤버만 참조하는 메소드에 대해 오류 또는 경로를 발행합니다. 서브클래스에서 메소드를 오버라이드할 수 있으므로 "잠재적으로 static"인 메소드를 static으로 만들면 기존 클라이언트가 중단됩니다.

무시

잠재적인 프로그래밍 문제점

동일한 값 비교('x == x')

사용할 경우, 일치 피연산자(예: 'x == x')를 포함하는 비교인 경우 컴파일러는 오류 또는 경고를 발행합니다.

경고

지정이 효과가 없음(예: 'x = x')

사용할 경우, 컴파일러는 지정이 효과가 없을 때마다(예: 'x = x') 오류 또는 경고를 발행합니다.

경고

부울 지정 가능성(예: 'if (a = b)')

사용할 경우, 부울 지정 가능성이 발생할 때마다(예: 'if (a = b)') 컴파일러가 오류 또는 경고를 발행합니다.

무시

박싱 및 언박싱 변환

이 옵션을 사용하는 경우, 컴파일러는 박싱 또는 언박싱 변환을 발견할 때마다 오류 또는 경고를 발행합니다. 오토 박싱(autoboxing)은 성능에 부정적인 영향을 줄 수 있습니다.

무시

문자열 연결에서 문자 배열 사용

사용할 경우, 컴파일러는 문자열 연결에서 char[] 표현식이 사용될 때마다 오류 또는 경고를 발행합니다.

"hello" + new char[]{'w','o','r','l','d'}

경고

vararg 인수에 대한 부정확한 유형 일치

이 옵션을 사용하는 경우, 컴파일러는 vararg 인수에 대한 부정확한 유형 일치을 발견할 때마다 오류 또는 경고를 발행합니다.

경고

비어 있는 명령문

사용할 경우, 컴파일러는 비어 있는 명령문(예: 불필요한 세미콜론)을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

사용하지 않은 오브젝트 할당

사용할 경우, 컴파일러는 사용되지 않은 할당된 오브젝트를 발견할 때 오류 또는 경고를 발행합니다. 예를 들면, 다음과 같습니다.

if (name == null)
   new IllegalArgumentException();

무시

열거에서 불완전한 'switch' 케이스

사용할 경우, 컴파일러는 참조된 열거의 모든 enum 상수에 대해 '기본' case 또는 case 문을 포함하지 않는 'switch' 문을 발견할 때마다 오류 또는 경고를 발행합니다.

이 경고는 Java 언어 스펙 14.11에 의해 권장됩니다. 'switch' 문이 모든 가능한 열거 값을 포함할 수 있도록 합니다.

경고

'기본' case가 있는 경우에도 신호

사용할 경우, 컴파일러는 'default' case가 이미 있더라도 열거 상수가 case에 포함되지 않으면 오류 또는 경고를 발행합니다.

이 옵션은 새 열거 상수가 추가되었을 때 누락된 case 문을 발견하는 데 도움이 됩니다.

Off

'switch'에 '기본' case가 누락됨

사용할 경우, 컴파일러는 'switch' 문에 'default' case가 없을 경우 오류 또는 경고를 발행합니다. 따라서 모든 가능한 값이 'case' 명령문에 포함되지 않은 경우 누락된 'default'는 플래그 지정됩니다.

이 옵션은 새 'switch' 표현식이 생략되지 않고 명시적으로 처리되는지 확인하는 데 도움이 됩니다. 또한 'switch' 명령문 다음에 초기화되지 않은 변수에 대한 컴파일 오류를 설명하는 데 도움이 될 수도 있습니다. 유효 값 세트가 향후 증가될 수 있으므로 이 변수는 또한 'default' case에서 초기화되어야 합니다.

무시

'switch' 케이스 fall-through

사용할 경우, 컴파일러는 이전의 비어 있지 않은 케이스를 실패 처리하여 케이스를 입력할 수 있을 때 오류 또는 경고를 발행합니다.

무시

숨겨진 catch 블록

try 문에 대해 로컬로 일부 catch 블록은 다른 블록을 숨길 수 있습니다. 예를 들면, 다음과 같습니다.

try { throw new java.io.CharConversionException();
} catch (java.io.CharConversionException e) {
} catch (java.io.IOException e) {}

사용할 경우, 컴파일러는 확인된 예외에 해당하는 숨겨진 catch 블록에 대해 오류 또는 경고를 발행합니다.

경고

'finally'가 정상적으로 완료되지 않음

사용할 경우, 컴파일러는 'finally' 문이 정상적으로 완료되지 않을 때마다(예: return 문 포함) 오류 또는 경고를 발행합니다.

경고

불필요한 코드(예: 'if (false)')

사용할 경우, 컴파일러는 불필요한 코드(예: 'if (false)')를 발견할 때 오류 또는 경고를 발행합니다.

경고

자원 누수

사용할 경우, 로컬 변수에 유형 'java.lang.AutoCloseable' (compliance >= 1.7)의 값 또는 유형 'java.io.Closeable' (compliance <= 1.6)의 값이 있고 플로우 분석 시 'close()' 메소드가 해당 값에서 로컬로 호출되지 않음을 표시하는 경우 컴파일러가 오류 또는 경고를 발행합니다.

경고

잠재적 자원 누수

사용할 경우, 로컬 변수에 유형 'java.lang.AutoCloseable' (compliance >= 1.7)의 값 또는 유형 'java.io.Closeable' (compliance <= 1.6)의 값이 있고 플로우 분석 시 'close()' 메소드가 모든 실행 경로의 해당 값에서 로컬로 호출되지 않음을 표시하는 경우 컴파일러가 오류 또는 경고를 발행합니다.

무시

serialVersionUID가 없는 직렬화 가능 클래스

이를 사용하는 경우, 'java.io.Serializable'을 구현하는 유형에 serialVersionUID 필드가 포함되지 않을 때마다 컴파일러가 오류 또는 경고를 발행합니다.

경고

상속된 메소드에서 동기화된 수정자 누락

사용할 경우, 컴파일러는 동기화된 수정자가 누락되어 있는 상속된 메소드를 발견할 때 오류 또는 경고를 발행합니다.

무시

클래스가 'equals()'를 대체하지만 'hashCode()'는 대체 안함

사용할 경우, 컴파일러는 'equals()'를 대체하지만 'hashCode()'는 대체하지 않는 클래스를 발견할 때 오류 또는 경고를 발행합니다.

무시

이름 음영표시 및 충돌

필드 선언이 다른 필드 또는 변수를 숨김

사용할 경우, 필드 선언이 다른 상속된 필드를 숨기면 컴파일러가 오류 또는 경고를 발행합니다.

무시

로컬 변수 선언이 다른 필드 또는 변수를 숨김

사용할 경우, 로컬 변수 선언이 다른 필드 또는 변수를 숨기면 컴파일러가 오류 또는 경고를 발행합니다.

무시

생성자 또는 setter 메소드 매개변수 포함

사용할 경우, 생성자 또는 setter 메소드 매개변수가 다른 필드 또는 변수를 숨기면 컴파일러가 오류 또는 경고를 추가로 발행합니다.

Off

유형 매개변수가 다른 유형을 숨김

사용할 경우, 내부 클래스의 유형 매개변수가 외부 유형을 숨기면 컴파일러가 오류 또는 경고를 발행합니다.

경고

메소드가 패키지 가시 메소드를 대체하지 않음

패키지 기본 메소드는 다른 패키지에 표시되지 않으므로 대체될 수 없습니다. 이 옵션을 사용할 경우 오류 또는 경고와 같은 시나리오가 발생하면 컴파일러가 신호를 보냅니다.

경고

인터페이스 메소드가 보호 설정된 'Object' 메소드와 충돌

사용할 경우, 컴파일러는 인터페이스가 상속되지 않은 Object 메소드와 호환할 수 없는 메소드를 정의할 때마다 오류 또는 경고를 발행합니다. 이러한 충돌이 해결될 때까지 인터페이스를 구현할 수 없습니다. 예를 들면, 다음과 같습니다.

interface I {
   int clone();
}

경고

권장되지 않고 제한된 API

지원되지 않는 API

사용할 경우, 컴파일러는 지원되지 않는 API의 사용을 오류 또는 경고로 신호합니다.

경고

지원되지 않는 코드 내의 지원되지 않는 API의 사용을 신호로 표시

이 옵션을 사용할 수 있는 경우, 컴파일러는 지원되지 않는 코드 내의 지원되지 않는 API 사용을 신호로 표시합니다. 문제점의 심각도는 "지원되지 않는 API" 옵션으로 제어됩니다.

Off

지원되지 않는 메소드 대체 또는 구현을 신호로 표시

이 옵션을 사용할 수 있는 경우, 컴파일러는 지원되지 않는 메소드 대체 또는 구현을 신호로 표시합니다. 문제점의 심각도는 "지원되지 않는 API" 옵션으로 제어됩니다.

Off

금지된 참조(액세스 규칙)

이 옵션을 사용하는 경우, 컴파일러는 액세스 규칙에 지정된 금지된 참조를 신호로 표시합니다.

오류

올바르지 않은 참조(액세스 규칙)

이 옵션을 사용하는 경우, 컴파일러는 액세스 규칙에 지정된 올바르지 않은 참조를 신호로 표시합니다.

경고

불필요한 코드

로컬 변수 값이 사용되지 않음

이 옵션을 사용하는 경우, 로컬 변수가 선언되지만 값이 범위 내에서 사용되지 않을 때마다 컴파일러가 오류 또는 경고를 발행합니다.

경고

매개변수 값이 사용되지 않음

이 옵션을 사용하는 경우, 매개변수가 선언되지만 값이 범위 내에서 사용되지 않을 때마다 컴파일러가 오류 또는 경고를 발행합니다.

무시

메소드 대체 및 구현에서 무시

사용할 경우, 매개변수가 선언되었지만 다른 메소드를 대체하거나 구현하는 메소드의 범위 내에서 사용되지 않을 때마다 컴파일러가 오류 또는 경고를 발행합니다.

On

'@param' 태그로 문서화된 매개변수 무시

사용할 경우, 읽히지 않는 매개변수가 '@param' 태그로 문서화되지 않을 때마다 오류 또는 경고를 발행하지 않습니다.

On

사용하지 않는 유형 매개변수

사용할 경우, 컴파일러는 사용하지 않는 유형 매개변수에 대해 오류 또는 경고를 발행합니다.

무시

사용하지 않는 가져오기

사용할 경우, 컴파일러는 사용하지 않는 가져오기 참조에 대해 오류 또는 경고를 발행합니다.

경고

사용하지 않는 private 멤버

이 옵션을 사용하는 경우, private 멤버가 선언되지만 동일한 단위 내에서 사용되지 않을 때마다 컴파일러가 오류 또는 경고를 발행합니다.

경고

불필요한 'else'문

사용할 경우, 컴파일러는 불필요한 else 문(예: if (condition) return; else doSomething();)을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

불필요한 cast 또는 'instanceof' 오퍼레이션

사용할 경우, 컴파일러는 불필요한 cast 또는 'instanceof' 오퍼레이션(예: if (object instanceof Object) return;)을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

처리된 예외의 불필요한 선언

이 옵션을 사용하는 경우, 컴파일러는 처리 확인된 예외에 대한 불필요한 선언을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

메소드 대체 및 구현에서 무시

사용할 경우, 다른 메소드를 대체하거나 구현하는 메소드에서 처리된 예외의 불필요한 선언을 발견할 때마다 컴파일러가 오류 또는 경고를 발행합니다.

On

'@throws' 또는 '@exception' 태그로 문서화된 예외 무시

사용할 경우, 컴파일러는 처리된 예외의 불필요한 선언이 '@throws' 또는 '@exception' 태그로 문서화될 때마다 오류 또는 경고를 발행하지 않습니다.

On

'Exception' 및 'Throwable' 무시

사용할 경우, 'Exception' 및 'Throwable' 예외의 불필요한 선언을 발견할 때마다 컴파일러가 오류 또는 경고를 발행하지 않습니다.

On

사용하지 않는 'break' 또는 'continue' 레이블

이 옵션을 사용하는 경우, 컴파일러는 사용되지 않은 'break' 또는 'continue' 레이블을 발견할 때마다 오류 또는 경고를 발행합니다.

경고

중복 수퍼 인터페이스

사용할 경우, 상위 유형에서 이미 구현한 인터페이스를 명시적으로 구현하는 유형을 발견할 때마다 컴파일러가 오류 또는 경고를 발행합니다.

무시

일반 유형

선택되지 않은 일반 유형 오퍼레이션

이 옵션을 사용하는 경우, 컴파일러는 선택되지 않은 일반 유형 조작을 발견할 때마다 오류 또는 경고를 발행합니다.

경고

원시 유형 사용

이 옵션을 사용하는 경우, 컴파일러는 원시 유형(즉, List<String> 대신 List) 사용을 발견할 때마다 오류 또는 경고를 발행합니다.

경고

최종 유형 바인드로 선언된 일반 유형 매개변수

이 옵션을 사용하는 경우, 컴파일러는 최종 유형을 포함하는 유형 바운드를 발견할 때마다 오류 또는 경고를 발행합니다.

경고

원시 API로 인한 불가피한 일반 유형 문제점 무시

이를 사용하는 경우, 참조된 API에 이미 원시 유형이 포함되어 있으므로 프로그래머가 피할 수 없는 일반 관련 유형 문제점을 컴파일러에서 무시합니다. 예를 들면, 임의의 유형이 상위 유형에서 오버라이드하는 메소드가 애초에 원시 유형을 사용하도록 선언되어 있기 때문에 이 유형의 메소드 서명 및 리턴 유형에서 원시 유형을 사용하도록 강제 실행할 수 있습니다.

이전 API가 결국 일반화되면 이 문제점 중 대부분이 사라지거나, 사용된 유형 인수가 올바르지 않으므로 컴파일 오류가 표시됩니다. 메소드 서명의 원시 참조의 경우에는 원시 유형 문제점이 다시 나타납니다.

Off

어노테이션

'@Override' 어노테이션 누락

이 옵션을 사용하는 경우, 컴파일러는 구현된 다른 메소드를 대체하는 메소드를 발견하고 '@Override' 어노테이션 누락을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

인터페이스 메소드(1.6 이상) 구현 포함

사용할 경우, 컴파일러는 인터페이스에서 선언된 메소드를 대체 또는 구현하는 메소드를 발견하고 '@Override' 어노테이션 누락을 발견할 때마다 오류 또는 경고를 발행합니다.
컴파일러 준수 레벨이 1.6 이상인 경우 해당 메소드에서만 '@Override'가 허용되어 해당 오류 또는 경고가 1.5 코드에서 나타나지 않습니다.

On

'@Deprecated' 어노테이션 누락

이 옵션을 사용하는 경우, 컴파일러는 추가 '@Deprecated' 어노테이션이 없는 지원되지 않는 유형을 발견할 때마다 오류 또는 경고를 발행합니다.

무시

어노테이션을 상위 인터페이스로 사용

이 옵션을 사용하는 경우, 컴파일러는 어노테이션을 구현하는 유형을 발견할 때마다 오류 또는 경고를 발행합니다. 설사 가능하더라도 이는 잘못된 사용으로 간주됩니다.

경고

'@SuppressWarnings'에서 처리되지 않은 경고

사용할 경우, '@SuppressWarnings' 어노테이션에 알 수 없는 토큰이 나타날 때마다 컴파일러가 오류 또는 경고를 발행합니다.

경고

'@SuppressWarnings' 어노테이션 사용

이 옵션을 사용하는 경우, 컴파일러는 '@SuppressWarnings' 어노테이션을 처리합니다. 사용할 경우, 모든 '@SuppressWarnings' 어노테이션이 제거된 것과 동일한 작용을 합니다.

On

사용하지 않은 '@SuppressWarnings' 토큰

사용할 경우, '@SuppressWarnings' 어노테이션에서 사용하지 않은 토큰을 발견할 때마다 컴파일러가 오류 또는 경고를 발행합니다.

경고

'@SuppressWarnings'로 선택적 오류 억제

사용할 경우, '@SuppressWarnings' 어노테이션이 선택적 컴파일 오류(여기에 "오류"로 설정된 옵션)를 억제합니다. 필수 컴파일 오류를 억제할 수는 없습니다.

Off

널 분석

널(null) 포인터 액세스

사용할 경우, 컴파일러는 널(null)일 수 있는 로컬 변수가 역참조됨을 발견할 때 오류 또는 경고를 발행합니다. 분석이 모든 널(null) 포인터 액세스를 찾을 수 없음을 참고하고 잠재 널(null) 포인터 액세스를 참조하십시오.

경고

잠재적 널(null) 포인터 액세스

이 옵션을 사용하는 경우, 컴파일러는 널(null)일 수 있는 로컬 변수가 역참조됨을 발견할 때 오류 또는 경고를 발행합니다. 분석은 상당히 신중하며 의심스러운 것이 있는 경우만 고려함을 참고하십시오.

분석의 품질은 어노테이션 기반 널 분석 사용 옵션으로 사용할 수 있는 널 어노테이션을 통해 향상될 수 있습니다.

무시

중복 널(null) 검사

사용할 경우, 널(null)이 될 수 없는 로컬 변수가 널(null)인지 테스트될 때마다 컴파일러가 오류 또는 경고를 발행합니다.

무시

널(null) 분석에 'assert' 포함

사용할 경우, 널 분석 수행 시 컴파일러가 'assert' 문을 제공합니다.

Off

어노테이션 기반 널 분석 사용

사용할 경우, 컴파일러는 주어진 유형에 '널' 값이 포함되어 있는지 여부를 지정할 때 어노테이션 @Nullable, @NonNull 및 @NonNullByDefault를 해석합니다.

이러한 분석의 영향은 다음 하위 옵션으로 제어됩니다.

널 어노테이션 사용도 참조하십시오.

Off

널 스펙 위반

이 옵션에 따라, 다음 상황 중 하나가 발견될 때마다 컴파일러가 오류 또는 경고를 발행합니다.

  1. 널이 아닌 어노테이션으로 선언된 메소드가 널 입력 가능 표현식을 리턴합니다.
  2. 널 입력 가능 표현식이 호출된 메소드의 해당 매개변수가 널이 아닌 어노테이션으로 선언된 메소드 호출에 인수로 전달됩니다.
  3. 널 입력 가능 표현식이 널이 아닌 어노테이션으로 선언된 로컬 변수에 지정됩니다.
  4. 널이 아닌 어노테이션으로 선언된 상속된 메소드를 대체하는 메소드가 널 입력 가능 어노테이션을 지정하여(반변적 리턴 금지)해당 규약을 완화하려고 합니다.
  5. 해당 매개변수 중 하나 이상에 대한 널 입력 가능 선언이 있는 상속된 메소드를 대체하는 메소드가 해당 매개변수에 널이 아닌 어노테이션을 지정하여(반변적 매개변수 금지) 해당 널 규약을 강화하려고 합니다.

위에서 표현식은 값으로 평가하도록 정적으로 알려진 경우 또는 널 입력 가능 어노테이션으로 선언된 경우 널 입력 가능으로 간주됩니다.

오류

널 어노테이션과 널 추론 간 충돌

이 옵션에 따라, 다음 상황 중 하나가 발견될 때마다 컴파일러가 오류 또는 경고를 발행합니다.

  1. 널이 아닌 어노테이션으로 선언된 메소드가 특정 플로우에서 널 값으로 평가하도록 정적으로 알려진 표현식을 리턴합니다.
  2. 특정 플로우에서 널 값으로 평가하도록 정적으로 알려진 표현식이 호출된 메소드의 해당 매개변수가 널이 아닌 어노테이션으로 선언된 메소드 호출에 인수로 전달됩니다.
  3. 특정 플로우에서 널 값으로 평가하도록 정적으로 알려진 표현식이 널이 아닌 어노테이션으로 선언된 로컬 변수로 지정됩니다.

오류

어노테이션이 없는 유형에서 @NonNull 유형으로의 변환이 확인되지 않음

이 옵션에 따라, 다음 상황 중 하나가 발견될 때마다 컴파일러가 오류 또는 경고를 발행합니다.

  1. 플로우가 런타임 시 널 값을 전달하지 않는 경우 널이 아닌 어노테이션으로 선언된 메소드가 충분하지 않은 널 정보를 정적으로 사용할 수 있는 표현식을 리턴합니다.
  2. 런타임 시 널 값으로 평가하지 않는 경우 충분하지 않은 널 정보를 정적으로 사용할 수 있는 표현식이 호출된 메소드의 해당 매개변수가 널이 아닌 어노테이션으로 선언된 메소드 호출에 인수로 전달됩니다.
  3. 런타임 시 널 값으로 평가하지 않는 경우 충분하지 않은 널 정보를 정적으로 사용할 수 있는 표현식이 널이 아닌 어노테이션으로 선언된 로컬 변수로 지정됩니다.

확인되지 않은 변환은 대개 어노테이션이 작성되지 않은 다른 변수 또는 메소드를 사용한 결과입니다.

경고

중복 널 어노테이션

사용할 경우, 현재 위치에 적용 가능한 기본값으로 동일한 효과를 얻을 수 있지만 널이 아닌 어노테이션이 적용되면 컴파일러가 오류 또는 경고를 발행합니다. 이러한 기본값은 @NonNullByDefault 어노테이션을 사용하여 설정될 수 있습니다.

경고

대체 메소드에서 어노테이션되지 않은 '@NonNull' 매개변수

사용할 경우, 컴파일러는 아래사항을 모두 충족시켰을 때 상속된 메소드를 대체하는 메소드의 매개변수에 대해 오류 또는 경고를 발행합니다.

  • 대체된 메소드가 해당 매개변수를 널이 아님으로 선언합니다.
  • 대체 메소드에 있는 매개변수가 널 어노테이션을 가지고 있지 않습니다.
  • 대체 메소드가 널 조건 기본값의 영향을 받지 않습니다.
  • 널 어노테이션의 상속을 사용하지 않습니다.

경고

패키지에서 누락된 '@NonNullByDefault' 어노테이션

사용할 경우, 컴파일러가 다음 경우에 오류 또는 경고를 발행합니다.

  1. 패키지에 기본 널 어노테이션이 없는 경우, package-info.java 누락 또는 package-info.java의 기본 널 어노테이션 누락의 결과
  2. 기본 패키지 내 유형에 기본 널 어노테이션이 없는 경우

무시

널 스펙에 기본 어노테이션 사용

사용할 경우, 컴파일러가 널 스펙에 어노테이션의 기본 세트를 사용합니다. 이러한 어노테이션은 org.eclipse.jdt.annotation 번들의 Eclipse SDK에 포함됩니다.

프로젝트에 사용할 서로 다른 어노테이션 이름을 지정할 수 있지만 Eclipse 컴파일러는 기본 어노테이션에 지정된 시맨틱만 지원합니다.

  • org.eclipse.jdt.annotation.Nullable: Java 어노테이션 유형의 완전한 이름으로, 메소드 시그니처, 변수 선언 또는 필드 선언의 유형에 적용될 때 널이 해당 위치에서 유효한 값이 되는 스펙으로 해석됩니다.
    현재 지원되는 위치는 메소드 매개변수, 메소드 리턴 유형, 로컬 변수 및 필드입니다.
  • org.eclipse.jdt.annotation.NonNull: Java 어노테이션 유형의 완전한 이름이며, 메소드 시그니처, 변수 선언 또는 필드 선언의 유형으로 적용될 때 널이 해당 위치에서 유효한 값이 아닌 스펙으로 해석됩니다.
    현재 지원되는 위치는 메소드 매개변수, 메소드 리턴 유형, 로컬 변수 및 필드입니다.
  • org.eclipse.jdt.annotation.NonNullByDefault: Java 어노테이션 유형의 완전한 이름입니다. 어노테이션 인수가 없는 요소에 적용 시 어노테이션이 작성된 요소 내에 있는 메소드 서명의 어노테이션이 작성되지 않은 모든 유형이 널이 아닌 어노테이션으로 지정된 경우와 같이 처리됩니다.
    이와 반대로, 어노테이션이 'false' 상수에 해당 인수로 적용되면 외부 범위의 모든 해당 기본값이 어노테이션이 작성된 요소에 대해 취소됩니다.

On

널 어노테이션 상속

사용할 경우, 컴파일러는 명시적 널 어노테이션이 없는 각 메소드에 대해 검사합니다. 널 어노테이션을 가진 메소드를 대체하는 경우, 현재 메소드를 대체된 메소드와 동일한 어노테이션을 가지고 있는 것처럼 처리합니다.

어노테이션 상속은 대체된 메소드의 사이트에서 기본 널 조건을 적용한 후 및 타동적으로 상속을 적용한 후 대체된 메소드의 유효한 널 조건을 사용합니다.

메소드 시그니처의 동일한 유형에 다른 내재적 널 어노테이션(널이 아닌 기본 및/또는 대체된 메소드의)을 적용할 수 있는 경우, 이를 오류로 플래그 지정하고 명시적 널 어노테이션을 사용하여 분명히 표시해야 합니다.

Off

필드에 구문적 널 분석 사용

사용할 경우, 컴파일러는 필드 참조에 대한 널 관련 경고가 정상적으로 발생되지만 동일한 필드 참조가 직전에 널이 아님으로 알려졌다는 것을 고려하여 낮은 위험 상태에서 억제될 수 있는 특정 구문 그룹을 발견합니다. 이 옵션을 사용할 경우 다음 힌트를 참조하십시오.

Off

위의 오류를 심각한 컴파일 오류와 같이 처리를 사용할 경우, 생성된 모든 오류(심각하거나 구성 가능한)로 인해 코드가 실행 불가능하게 됩니다. 사용하지 않을 경우, 심각한 오류(구문 오류, 유형 오류 또는 Java 언어 스펙에 따른 오류)가 아닌 한 코드를 실행할 수 있습니다.

관련 개념

문제점 보기
빠른 수정사항
Java 빌더