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的函数可以接受这两个特性