代码之家  ›  专栏  ›  技术社区  ›  Emil S.

创建仅设置属性属性的“假”属性

  •  0
  • Emil S.  · 技术社区  · 6 年前

    对不起,我不知道该如何恰当地用词来形容这个词。我有以下情况:我有一个类,它有一个用于绘制东西的绘画对象。我想让全班看起来有一个颜色场。设置该字段应该只设置存储的绘制对象的颜色,而不是实际设置字段。在Java中,我会这样做:

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

    然后我可以像访问 Foo ,使用setter和getter。如何在Kotlin中执行此操作,以便访问Kotlin样式的属性(如 myFoo.color = Color.RED )是否设置了油漆的颜色属性?

    3 回复  |  直到 6 年前
        1
  •  1
  •   shkschneider blazzerbg    6 年前

    你应该看看科特林的getter和setter:

    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
  •  2
  •   Artem Botnev    6 年前

    你可以这样做

    class Foo {
    
    private val p = Paint()
    
    var color: Int
        get() = p.color
        set(value) {
            p.color = value
        }
    

    }

        3
  •  0
  •   Yoni Gibbs    6 年前

    Implementation by Delegation 这是一种常见的方法。例如,如果 Paint 实现了一个接口(例如 Paintable )那你就可以 Foo 以…为例 可绘画的 并将所有呼叫委托给它,如下所示:

    interface Paintable { var color: Int }
    
    class Paint(override var color: Int) : Paintable
    
    class Foo(p: Paint) : Paintable by p