只允许选择空值

时间:2013-08-29 06:06:59

标签: java null nullable static-analysis static-typing

让我们假装我讨厌null。让我们假装选择退出,就像@Nullable一样,对我来说还不够。让我们说我希望它可以选择加入;如果没有使用@Nullable明确注释对象,则不允许使用空值。

示例:

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的源代码?

谢谢!

1 个答案:

答案 0 :(得分:0)

在标有@NonNullByDefault的代码区域内,您基本上可以得到问题所要求的内容:需要显式声明该默认值的任何异常。可以按类/接口或每个包声明默认值。

注1:您需要使用null注释的Java-8变体(null type annotations),因此它们会影响所有位置的类型引用。

注意2:有关详细信息,请参阅Java doc,其中适用的默认值(可以进行微调,顺便说一下)。由于@Jon Skeet评论中提到的困难,故意遗漏ARRAY_CONTENTS