2013-08-29 7 views
1

null을 싫어하는 척하자. @ Nullable처럼 선택 해제하는 것이 나를 위해 충분하지 않다고 가정 해 봅시다. 옵트 인을 원한다고 가정 해 봅시다. 오브젝트가 @ Nullable로 명시 적으로 주석되어 있지 않으면 널 (NULL)이 허용되지 않습니다.nulls opt-in 만 허용

예 :

MyClass derp = null;   // Compiler error 
@Nullable MyClass derp = null; // Fine 
@Nullable Integer x = 4;  // Fine 
@Nullable Integer x = null; // Fine 
Integer x = 4;     // Fine 
Integer x = null;    // Compiler error 

또 다른 예 :

public static void myFunction(@Nullable Integer x) { 
    Integer y = x; // Compiler error, because we know x might 
        // be null, and that's not allowed. In other 
        // words: Integer != @Nullable Integer 
} 

가 어떻게이 가겠어요? javac 플러그인을 작성해야합니까? 아마도 사전 컴파일러 통과일까요? 이 작업을 수행하는 프레임 워크가있을 수 있습니까? 아니면 javac의 소스 코드를 수정할 수 있습니까?

감사합니다.

+0

배열에 대해 무엇을 할 계획입니까? 구현을 고려하기 전에 필요한 모든 언어 변경 사항을 생각해 보려고합니다. –

+0

어 ... 좋은 지적이야. 아마도 Nullable []을 사용하여 기본 생성자를 호출하거나 MyClass []와 같은 것을 무법화 할 수 있습니다. 내 질문에서 제안하는 것을해야한다고 말하지는 않겠지 만, 우리가 그렇게하기로 결심했다면 얼마나 어려울지를 알고 싶다. – Verdagon

+1

난이도는 언어의 변화 정도에 달려 있습니다. 그렇지 않습니까? 적어도 상당 부분. 아마도 –

답변

0

@NonNullByDefault으로 표시된 코드 영역 내에서 기본적으로 질문하는 내용을 얻을 수 있습니다.이 예외의 예외는 명시 적으로 선언해야합니다. 기본값은 클래스/인터페이스 또는 패키지별로 선언 할 수 있습니다.

참고 1 : null 주석 (Java 8 변형 null annotation (null type annotations))을 원하므로 모든 위치의 유형 참조에 영향을줍니다.

참고 2 : 자세한 내용은 Java doc을 참조하십시오. 기본값이 정확히 적용됩니다 (미세 조정할 수 있음, btw). ARRAY_CONTENTS은 @Jon Skeet의 언급에서 언급 된 것과 같은 어려움 때문에 의도적으로 생략되었습니다.