[java] @ 널링 가능한 주석 사용법

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

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

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

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



답변

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

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


답변

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

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


답변

도구마다 도구의 의미가 @Nullable다르게 해석 될 수 있습니다 . 예를 들어, Checker FrameworkFindBugs@Nullable 다르게 처리 됩니다 .


답변

물론, 분명히 다른 생각이 있습니다. 내 세상에는 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...하여 의도를 명확하게 지정하십시오.


답변