@ 널링 가능한 주석 사용법


347

Java에서 다음과 같이 선언 된 메소드를 보았습니다.

void foo(@Nullable Object obj)
{ ... }

@Nullable여기 의 의미는 무엇입니까 ? 입력이 가능하다는 의미 null입니까?

주석이 없으면 입력은 여전히 ​​null 일 수 있으므로 그게 다가 아닌 것 같아요?


3
아래 답변에서 주석에는 null 값이 허용됨, 사용 위치의 예, 시도 할 수있는 코드 분석기 및 해석이 다를 수 있음을 알았습니다. 이 형식이 왜 좋은지 알아? 특히이 질문을하는 모든 라운드 +1.
icedwater

8
@Nullable질문의 맥락에서 어떤 라이브러리를 제공 하고 있습니까? 그것은인가 검사기?
8bitjunkie

답변:


367

메소드가 널 (NULL) 값을 승인하고 메소드를 대체하는 경우 널 (NULL) 값도 허용해야 함을 분명히합니다.

또한 FindBugs 와 같은 코드 분석기에 대한 힌트 역할을합니다 . 예를 들어, 그러한 메소드가 null을 먼저 확인하지 않고 인수를 역 참조하면 FindBugs에서 경고를 표시합니다.


82

이 주석은 일반적으로 제거하는 데 사용됩니다 NullPointerExceptions. @Nullable이 매개 변수는입니다 null. 이러한 행동의 좋은 예는 Google Guice 에서 찾을 수 있습니다 . 이 경량 종속성 주입 프레임 워크에서이 종속성이있을 수 있음을 알 수 있습니다 null. null주석없이 전달하려고 하면 프레임 워크가 작업을 거부합니다.

더 많은 것은 주석 @Nullable과 함께 사용될 수 있습니다 @NotNull. 여기에서 올바르게 사용하는 방법에 대한 팁을 찾을 수 있습니다 . IntelliJ의 코드 검사는 주석을 확인하고 코드를 디버깅하는 데 도움이됩니다.



1

물론, 분명히 다른 생각이 있습니다. 내 세상에는 API 호출자, 데이터베이스 레코드, 이전 프로그래머 등과 같은 제어 할 수없는 제 3자를 다루기 때문에 "null을 전달하지 마십시오"를 강요 할 수 없습니다. . Java8 이상에서는 if블록 보다 조금 더 깔끔한 접근 방식이 있습니다.

public String foo(@Nullable String mayBeNothing) {
   return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}

로 교체 .orElse하여 예외를 발생시킬 수도 있습니다 orElseThrow(() -> new Exception("Dont' send a null")).

기능적으로 아무것도 추가하지 않는 @Nullable을 사용하지 않으려면 매개 변수의 이름을 지정 mayBe...하여 의도를 명확하게 지정하십시오.

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