[外文翻译]《Effective Java》在哪些方面影响了 Ko(4)

由于存在大量潜在问题,Kotlin等优秀编程语言(如C#)没有检查型异常。为了让调用者知道可能发生的异常,应该用 throws 标签在函数的文档中定义它们。

8. 强制的 null 检查

在Java中,public方法的方法签名不会告诉你返回值是否为空。例如:

public List<Item> getSelectedItems()

如果一条都没选会怎么样?这个方法是否返回null?还是返回空列表���如果不看方法的实现细节,我们就无法知道(除非这个方法有很好的javadoc描述了返回类型)。

这种情况下,开发人员可能会犯的两个错误是:

1.忘记检查返回值是否为空,导致著名的NullPointerException;

2.在返回值永远不可能为空的情况下检查了其是否为空,造成代码冗余。

Joshua Bloch 在第43条建议,用返回一个空的集合数组来取代返回null。这一条让我想到了可空和不可空类型。有了Kotlin的空安全性(null safety),你将知道返回值是否为空。

举个例子:一个返回类型List <Item>? 意味着它可以为null,而List <Item>则表示不能为null。如果它可以为空,编译器就会强制我们在访问其属性或调用其函数之前检查它是否为null。所以,更为强大的编译器将阻止开发者犯错误,生活突然变得容易了。

图1:[外文翻译]《Effective Java》在哪些方面影响了 Kotlin  的设计?

9. 没有原始类型(Raw types)

Java 1.5中引入了泛型,它们是实现类型安全的好方法。而为了向后兼容性,仍然可以使用原始类型,但Joshua Bloch在第23条中建议使用泛型(List <Integer>而不是List)以避免ClassCastExceptions。Kotlin不允许使用原始类型,因此必须为泛型指定类型参数,从而实现代码的类型安全。

总结

以上就是我认为《Effective Java》这本书影响了 Kotlin 设计的几处地方,肯定有遗漏,如果你有其它意见和建议,欢迎讨论。

原文:How “Effective Java” may have influenced the design of Kotlin

翻译:技术风向标

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cc8c7fb36c2398f444afd229c7b5ef12.html