Kotlin:并行可空/空安全特性或接口的最佳实践?
Kotlin: best practice for parallel nullable / null safe trait or interface?
考虑以下简单特征:
trait HasAge {
val dateOfBirth: LocalDate
val age: Int
get() = ...
}
现在假设我有这样一个人class:
class Person : HasAge {
...
public override var dateOfBirth: LocalDate? = null
}
如果我构建一个库并且我想同时满足可为 null 和 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
的函数可以接受两个特征
考虑以下简单特征:
trait HasAge {
val dateOfBirth: LocalDate
val age: Int
get() = ...
}
现在假设我有这样一个人class:
class Person : HasAge {
...
public override var dateOfBirth: LocalDate? = null
}
如果我构建一个库并且我想同时满足可为 null 和 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
的函数可以接受两个特征