让我们假装我讨厌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的源代码?
谢谢!
答案 0 :(得分:0)
在标有@NonNullByDefault的代码区域内,您基本上可以得到问题所要求的内容:需要显式声明该默认值的任何异常。可以按类/接口或每个包声明默认值。
注1:您需要使用null注释的Java-8变体(null type annotations),因此它们会影响所有位置的类型引用。
注意2:有关详细信息,请参阅Java doc,其中适用的默认值(可以进行微调,顺便说一下)。由于@Jon Skeet评论中提到的困难,故意遗漏ARRAY_CONTENTS
。