条都没选会怎么样?这个方法是否返回null?还是返回空列表?如果不看方法的实现细节,我们就无法知道(除非这个方法有很好的javadoc描述了返回类型??。
这种情况下,开发人员可能会犯的两个错误是:
Joshua Bloch 在第43条建议,用返回一个空的集合数组来取代返回null。这一条让我想到了可空和不可空类型。有了Kotlin的空安全性(null safety),你将知道返回值是否为空。
举个例子:一个返回类型List <Item>? 意味着它可以为null,而List <Item>则表示不能为null。如果它可以为空,编译器就会强制我们在访问其属性或调用其函数之前检查它是否为null。所以,更为强大的编译器将阻止开发者犯错误,生活突然变得容易了。
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
翻译:技术风向标