Настройка установщика интерфейса в классе, реализующего его

Только начните с использования kotlin в android-

Я пытаюсь использовать setter интерфейса в классе, реализующем его –

interface MyInterface { val prop: Int // abstract var propertyWithImplementation: String get() = "foo" set(text){"$text foo"} fun foo() { print(prop) } } class Child : MyInterface { override val prop: Int = 29 override var propertyWithImplementation="bhu" } fun main(args: Array<String>) { println(Child().propertyWithImplementation) } 

Выход: бх

Ожидаемый результат = bhu foo

Где я иду не так?

Вы переопределяете var , а не устанавливаете его, а не используете родительский сеттер в переопределении, поэтому он не используется каким-либо образом. Настройка будет выглядеть так:

 class Child : MyInterface { override val prop: Int = 29 init { propertyWithImplementation="bhu" } } 

но если вы это сделаете, то выход будет foo потому что это то, что всегда возвращает геттер. И сеттер на самом деле ничего не устанавливает, он просто создает строку и игнорирует ее.

У вас нет полей поддержки в интерфейсе, поэтому вам нужно сохранить значение в другом месте, например

 interface MyInterface { protected var backingProperty: String var propertyWithImplementation: String get() = backingProperty set(text){ backingProperty = "$text foo" } } class Child { override var backingProperty = "foo" } 

для устранения этой проблемы.