Kotlin:并行可空/空安全特性或接口的最佳实践?
考虑以下简单的特征:
trait HasAge { val dateOfBirth: LocalDate val age: Int get() = ... }
现在假设我有这样一个人类:
class Person : HasAge { ... public override var dateOfBirth: LocalDate? = null }
如果我建立一个库,并且我想要兼顾可为空和空安全的用户,那么我将得到如下所示的重复项:
trait HasAge { val dateOfBirth: LocalDate val age: Int get() = ... } trait HasAgeN { val dateOfBirth: LocalDate? val age: Int? get() = ... }
有没有更好的方法来实现这一目标? 即一个特质或库函数可以处理这两种情况,而不需要复制所有的东西?
你可以扩展一个特性,覆盖类型:
trait HasAgeN { val date: LocalDate? val age: Int? get() = ... } trait HasAge : HasAgeN { override val date: LocalDate override val age: Int get() = ... }
现在,一个需要HasAgeN
的函数可以接受这两个特性