我知道您不能在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
字段?
答案 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允许您进行不同的实施。