创建仅设置属性的属性的“伪造”属性

时间:2018-12-06 13:09:41

标签: android kotlin

对不起,标题太晦涩,我不知道该如何正确地表达。我遇到以下情况:我有一个类,该类具有用于绘制某些内容的Paint对象。我希望该类具有色域的外观。设置该字段应该只设置存储的Paint-Object的颜色,而不是实际设置一个字段。在Java中,我会这样:

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

然后,我可以使用setter和getter来访问Foo字段的颜色。如何在Kotlin中执行此操作,以便可以访问Kotlin样式的属性(如myFoo.color = Color.RED)并设置其Paint的color属性?

3 个答案:

答案 0 :(得分:2)

您可以这样做

class Foo {

private val p = Paint()

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

}

答案 1 :(得分:1)

您应该看看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

答案 2 :(得分:0)

Implementation by Delegation是此处的常用方法。例如如果Paint实现了一个接口(例如Paintable),则可以使Foo接受Paintable的实例,并按以下方式委派对它的所有调用:

interface Paintable { var color: Int }

class Paint(override var color: Int) : Paintable

class Foo(p: Paint) : Paintable by p