Program Tip

사용할 @NonNull Java 주석

programtip 2020. 11. 25. 08:21
반응형

사용할 @NonNull Java 주석


이 질문에 이미 답변이 있습니다.

이란 무엇입니까 최고의 '널 (null)이 아닌'주석?

의미에서 "최고"

  • 표준 방식 예 : 미래 보장성 (예 : 표준 jdk 등의 지원)
  • IDE 지원 (개발자를위한 사용법을 나타 내기 위해 Java 문서에 표시됨)
  • findbugs와 같은 정적 분석 도구 지원
  • 런타임 분석 지원

현재 세상의 모습은 다음과 같습니다. 더 많은 통찰력을 얻을 수 있습니다.

  • javax.validation.constraints.NotNull( Docs )
    + javax 패키지는 따라서 미래 지향적 인 것처럼 보입니다-JSE가 아닌
    JEE의 일부 . JSE에서는 추가 라이브러리가져와야 합니다. -정적 분석 도구에서 지원되지 않음 (런타임 유효성 검사 만 해당)

  • edu.umd.cs.findbugs.annotations.NonNull( 문서 )
    - 외부 라이브러리 아닌 javax패키지
    - 중단 findbugs 버전 3.x 보낸
    (소나 findbugs 의해 때문에) 정적 분석을 위해 사용 +

  • javax.annotation.Nonnull( 문서가 )
    + (findbugs으로) 정적 분석을 위해 사용
    - JSR-305는 휴면 / 죽은 / 알려지지에 그대로 FB 메일 링리스트가 나타났다. 저자 Bill Pugh는 직접 질문을했지만 몇 년 동안 주에 대해 언급하지 않았습니다.

  • org.eclipse.jdt.annotation_2.0.0( docs , 흥미로운 프리젠 테이션 )
    + 정적 분석에 사용됨 (하지만 findbugs가 아닌 Eclipse에서)-eclipse
    소유 (독립형으로 사용하지 않음)

  • org.jetbrains.annotations.NotNull( docs )
    + 정적 분석에 사용됨
    (하지만 findbugs가 아닌 intelliJ에서)-IntelliJ 소유 (그러나 jar로 공개적으로 사용 가능)

  • lombok.NonNull( 문서 )
    + 코드 생성 제어에 사용
    -독점 주석

  • android.support.annotation.NonNull( docs )
    + android studio의 정적 분석
    -Android 전용 주석

  • org.checkerframework.checker.nullness.qual.NonNull( docs )
    + Java8의 일부인 JSR308 구현 (코드의 다른 부분에 주석을 작성하는 기능을 도입했지만 새 주석을 도입하지 않음)
    + 정적 코드 (하지만 findbug가 아님) 런타임 분석에 사용
    -외부 라이브러리 그러나 자바 사람들 보증 하는 것 같습니다.

현재 나는 Checker Framework를 사용 하지만 다른 견해를 기대하고 있습니다.

[면책 조항] 여기에 질문을했지만 답변을받지 못했다는 것을 알고 있습니다 (또는 대답이 틀렸거나 불완전하거나 오래됨) [/ 면책 조항]


표준 @NonNull주석 이 없습니다 . 이러한 주석을 만드는 것이 JSR 305의 목표였으며 오랫동안 버려졌습니다. @NonNullJSR 305가 재구성 될 때까지 표준 주석 이 없습니다 . 오라클은 현재 그렇게 할 계획이 없습니다. (JEE 주석은 JSR 305의 범위를 벗어납니다.)

미래 보장을 위해 고려해야 할 가장 중요한 요소는 주석이 유형 주석인지 선언 주석인지 여부입니다. 때문에 @NonNull오히려 변수 자체보다 변수 값의 속성을 말한다, 그것은 유형 약어해야합니다. 유형 주석이기 때문에에서와 같이 더 많은 위치에 주석을 작성할 수도 있습니다 List<@NonNull String>.

@Target주석의 정의 에서 메타 주석을보고 주석이 유형 주석인지 여부를 확인할 수 있습니다 . 이 글을 쓰는 시점에서 Checker Framework와 Eclipse 버전 만이 타입 어노테이션 인 것 같아서 선언 어노테이션 인 것보다 선택하겠습니다. 다른 어노테이션의 개발자도 유형 어노테이션이되도록 업데이트 할 수 있습니다. 나는 그들의 계획을 모른다.

유일한 단점은 유형 주석을 사용하려면 Java 8 컴파일러를 사용해야한다는 것입니다. 검사 프레임 워크는 자바 7 컴파일러에 의해 컴파일의 주석이 포함 된 코드를시키는 메커니즘을 가지고있다.

참고 URL : https://stackoverflow.com/questions/35892063/which-nonnull-java-annotation-to-use

반응형