Kotlin:我如何在Java中使用委托属性?

时间:2017-07-17 23:53:21

标签: java delegates kotlin delegation delegated-properties

我知道您不能在Java中使用委托属性语法,并且不会像在Kotlin中那样“覆盖”set / get运算符,但我仍然希望使用现有的属性委托在Java。

例如,int的简单委托:

class IntDelegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>) = 0
}

在Kotlin当然我们可以这样使用:

val x by IntDelegate()

但是我们如何在Java中以某种形式使用IntDelegate?这是开始,我相信:

final IntDelegate x = new IntDelegate();

然后直接使用这些功能。但是我如何使用getValue函数?我的参数是什么?如何获得Java KProperty字段?

2 个答案:

答案 0 :(得分:3)

如果你真的想知道Kotlin如何在Java中委托属性,那么它就是:在这个例子中,java类x的属性JavaClass被委托给{{1标准委托。

Delegates.notNull

但是我不建议使用这个解决方案,不仅因为需要样板文件,而且因为它在很大程度上依赖于委托属性和kotlin反射的实现细节。

答案 1 :(得分:1)

  

我知道你不能在Java中使用委托属性语法,并且不会获得&#34;覆盖&#34;的便利性。像在Kotlin中的set / get操作符,但我仍然想在Java中使用现有的属性委托。

不,就像你在开始时说的那样,它在Java中不存在。但如果你坚持这样做,你可以做类似的事情。

public interface Delegate<T> {
    T get();
    void set(T value);
}

public class IntDelegate implements Delegate<Integer> {
    private Integer value = null;

    @Override
    public void set(Integer value) {
        this.value = value;
    }

    @Override
    public Integer get() {
        return value;
    }
}

final Delegate<Integer> x = new IntDelegate();

界面中的Delcare x允许您进行不同的实施。