1

让我们假设我讨厌 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的源代码?

谢谢!

4

1 回答 1

0

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

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

注意 2:有关详细信息,请参阅Java 文档,其中完全适用默认值(可以微调,顺便说一句)。ARRAY_CONTENTS由于@Jon Skeet 的评论中提到的困难,因此故意省略了这一点。

于 2015-07-19T18:56:33.437 回答