модификатор доступа "только для чтения"? - PullRequest
0 голосов
/ 21 февраля 2019

«традиционная» реализация:

interface IFoo{
    fun getS():String
    fun modifyS():Unit
}

class Foo : IFoo{
    private var s = "bar"

    override fun getS() = s.toUpperCase()
    override fun modifyS(){ s = when(s){
        "bar" -> "baz"
        else -> "bar"
    }}
}

Что бы я хотел, теперь было бы примерно так:

interface IFoo{
    var s:String
        protected set

    fun modifyS():Unit
}

class Foo : IFoo{
    override var s = "bar"
        protected set
        get() = field.toUpperCase()

    override fun modifyS(){ s = when(s){
        "bar" -> "baz"
        else -> "bar"
    }}
}

У меня есть догадка, ответ будетнет, но ...

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 21 февраля 2019

Нет способа ограничить видимость элемента интерфейса до protected.

Однако вы можете определить val в интерфейсе и переопределить его с помощью var вреализации:

interface IFoo {
    val s: String
}

class Foo : IFoo {
    override var s = "bar"
        protected set
        get() = field.toUpperCase()
}
...