|
1
16
我目前的语言设计哲学是,可空性应该是程序员被迫要求的,而不是默认在引用类型上给出的(在这方面,我同意Tony Hoare-谷歌最近关于QCon的演讲)。 在这个特定的例子中,对于不可空的b2,它甚至不会通过静态检查:保守分析无法保证b2不是空的,因此程序在语义上没有意义。 我的精神很简单。引用是对某个资源的间接句柄,我们可以遍历它来访问该资源。可为空的引用包括 要么 资源的间接句柄, 或 资源不可用的通知,并且人们永远无法预先确定正在使用哪种语义。这要么会预先进行大量检查(它是空的吗?不是?耶!),要么会产生不可避免的NPE(或等效物)。如今,大多数编程资源并没有受到大规模的资源约束,也没有绑定到一些有限的底层模型——简单地说,空引用就是其中之一。..
|
|
|
2
11
|
|
3
9
我也会把使用它定为非法。可以为空的引用(或任何其他可以解除引用它的东西)上的运算符。你会如何使用它们?你必须先将它们转换为非空值。你会怎么做?通过测试它们是否为null。
我会再加一点糖:
这只是给出了名字
请注意
然后,对于用值替换null的常见情况,可能需要一点糖:
Spec#有另一个与非空值相关的语法扩展,原因是在构造过程中确保非空值正确初始化的问题:
换句话说,您必须以与调用其他构造函数相同的方式初始化字段
|
|
|
4
4
看看 Elvis operator Java 7的提案。这做了类似的事情,因为它将空检查和方法分派封装在一个运算符中,如果对象为空,则具有指定的返回值。因此:
检查字符串s是否为null,如果是,则返回字符串“null”,如果不是,则返回该字符串的值。思考的食物,也许吧。 |
|
|
5
3
其他语言中类似功能的几个例子:
还有
|
|
6
0
将可空性作为配置设置,可执行
代码。这样,您将允许默认情况下喜欢可以为null的对象的人在他们的源代码中享受它们,而允许那些希望默认情况下所有对象都不为null的人也这样做。此外,提供关键字或其他工具,明确标记哪些对象和类型的声明可以为空,哪些不能为空,类似于
例如
许多人认为,给每个人他们想要的东西是不可能的,但如果你正在设计一种新语言,尝试新事物。Tony Hoare介绍了
|
|
|
7
-3
是的,这是自芭芭拉和斯蒂芬以来语言方面最大的进步 invented types in 1974. :
|
|
|
Aaron Digulla · 为@Nonnull注释参数编写单元测试 9 年前 |