Создайте поддельное свойство, которое просто устанавливает свойство свойства - PullRequest
0 голосов
/ 06 декабря 2018

Извините за вонючий титул, я понятия не имею, как правильно сформулировать это.У меня следующая ситуация: у меня есть класс с объектом Paint для рисования чего-либо.Я хочу, чтобы у класса было цветное поле.Установка этого поля должна просто установить цвет хранимого Paint-Object и не устанавливать поле.В Java я сделал бы это так:

public class Foo {
    private Paint p;
    public void setColor(int color) {
        p.setColor(color);
    }
    public int getColor() {
        return p.getColor();
    }
}

Тогда я могу получить доступ к цвету, как поле Foo, используя сеттеры и геттеры.Как я могу сделать это в kotlin, чтобы я мог получить доступ к свойству в стиле Kotlin (например, myFoo.color = Color.RED) и установить свойство color в Paint?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Реализация делегацией является распространенным подходом здесь.например, если Paint реализовал интерфейс (например, Paintable), тогда вы можете Foo взять экземпляр Paintable и делегировать ему все вызовы следующим образом:

interface Paintable { var color: Int }

class Paint(override var color: Int) : Paintable

class Foo(p: Paint) : Paintable by p
0 голосов
/ 06 декабря 2018

Вы можете сделать это так

class Foo {

private val p = Paint()

var color: Int
    get() = p.color
    set(value) {
        p.color = value
    }

}

0 голосов
/ 06 декабря 2018

Вы должны взглянуть на геттеры и сеттеры в Kotlin:

class Foo {
    private var p: Paint? = null
    var color: Color
        set(value) { p.color = value }
        get() = p.color
}

Чтобы настроить вещи.

https://kotlinlang.org/docs/reference/properties.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...