Kotlin:并行可空/空安全特性或界面的最佳实践?

时间:2015-01-30 12:31:54

标签: 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() = ...
}

有没有更好的方法来实现这一目标?即一个特征或库函数,可以处理这两种情况而不会重复一切?

1 个答案:

答案 0 :(得分:1)

您可以使用另一个特征扩展一个特征,覆盖类型:

trait HasAgeN {
  val date: LocalDate?
  val age: Int?
      get() = ...
}

trait HasAge : HasAgeN {
  override val date: LocalDate
  override val age: Int
      get() = ...
}

现在,一个需要HasAgeN的函数可以接受这两个特征