考虑以下简单特征:
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() = ...
}
有没有更好的方法来实现这一目标?即一个特征或库函数,可以处理这两种情况而不会重复一切?
答案 0 :(得分:1)
您可以使用另一个特征扩展一个特征,覆盖类型:
trait HasAgeN {
val date: LocalDate?
val age: Int?
get() = ...
}
trait HasAge : HasAgeN {
override val date: LocalDate
override val age: Int
get() = ...
}
现在,一个需要HasAgeN
的函数可以接受这两个特征