Kotlin接口属性:仅需要公共设置器,而无需公共设置器

时间:2019-05-07 16:34:43

标签: kotlin interface properties scope set

我试图创建一个接口,以强制其派生类具有特定属性,但只能使用公共获取程序。由于我不想在其私有范围之外进行更改,因此我不希望它实现公共集。

interface Transaction{
   var transferDate: Date get //I only require a get, no set
}

class MoneyTransaction(){
   override var transferDate: Date get private set 
/*private set does not work*/
}

2 个答案:

答案 0 :(得分:4)

属性是某些数据的访问器。您将拥有一个吸气剂,并且如果该属性是可变的,那么它也会是一个setter。因此,您可以使用val属性覆盖任何已声明的var属性:

interface Transaction {
   val transferDate: Date
}

class MoneyTransaction: Transaction {
   override lateinit var transferDate: Date
       private set 
}

请注意,如果使用对象初始化属性,则无需将属性设为lateinit var;我只是添加了它,以使您的示例正确编译。

答案 1 :(得分:0)

除了@tynn的helpful answer外,对于我来说,我只需要一个访问器来访问来自另一个源的数据。对于这种情况,假设使用getter初始化值,则可以使用val代替lateinit var,并且无需指示private set

作为与其他示例一致的示例:

interface Transaction {
   val transferDate: Date
}

class MostRecentTransaction(private val repo: AccountRepository) : Transaction {
   override val transferDate: Date
      get() = repo.transactions.first.transferDate
}