【发布时间】:2013-09-01 10:36:54
【问题描述】:
让我们假装我讨厌 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的源代码?
谢谢!
【问题讨论】:
-
您打算如何处理数组?在您考虑实施之前,我会尝试考虑您需要的所有语言更改。
-
嗯...好点。也许我会让它调用默认构造函数,或者只是取缔 MyClass[] 之类的东西以支持 Nullable
[]。我并不是说我们应该按照我的问题建议去做,但我想知道如果我们真的决定这样做会有多难。 -
嗯,难度级别将取决于语言改变了多少,不是吗?至少在很大程度上。
-
也许吧。这个问题仅限于静态分析领域,所以它应该不是非常困难......人们以前写过这样的东西,对吧?
-
有些语言不允许空值,是的。但这很棘手,并且在不先决定要做什么的情况下尝试弄清楚如何做对我来说似乎是个坏主意。精确的细节很容易改变特定方法的可行性。
标签: java null nullable static-analysis static-typing