Kotlin 添加抽象私有getter和公共setter的正确方法是什么?

Kotlin 添加抽象私有getter和公共setter的正确方法是什么?,kotlin,Kotlin,我有一个接口,我想要一个属性,可以在类内部修改,但不能在类外部修改。我不能使用val,因为它需要是可变的,并且var关键字不能有指定的私有setter,因为它在接口中 在Java中,我会这样做: public <T> getMyProperty(); 在Kotlin中,您实际上可以用var覆盖val,因此,我认为,您想要的可以表示为: interface Iface { val foo: Foo } 或者,您可以使用带有支持字段和默认访问器的属性覆盖val: class

我有一个接口,我想要一个属性,可以在类内部修改,但不能在类外部修改。我不能使用val,因为它需要是可变的,并且var关键字不能有指定的私有setter,因为它在接口中

在Java中,我会这样做:

public <T> getMyProperty();

在Kotlin中,您实际上可以用
var
覆盖
val
,因此,我认为,您想要的可以表示为:

interface Iface {
    val foo: Foo
}

或者,您可以使用带有支持字段和默认访问器的属性覆盖
val

class ImplDefaultGetter : Iface {
    override var foo: Foo = someFoo
        private set
}

在这两种情况下,可变性和私有setter的存在成为类的一个实现细节,不会通过接口公开。

这是不清楚的-您在Q标题中说私有getter,然后显示一个公共getter作为示例。事实上,“抽象的私人”毫无意义。
class Impl : Iface {
     override var foo: Foo
         get() = TODO()
         private set(value) { TODO() } 
}
class ImplDefaultGetter : Iface {
    override var foo: Foo = someFoo
        private set
}