在java中实现一个kotlin接口

所以,在这个问题之后 ,我基本上利用反射来传递原始引用来修改原语本身,如:

_begin("Another Window", ::showAnotherWindow)

我正在寻找一些东西,使类似的东西也可以从Java,现在我使用平原原始数组:

 private boolean[] showAnotherWindow = {false}; imgui.begin("Another Window", showAnotherWindow); 

@hotkey建议我可以创建一个实现KMutableProperty0接口的类,并自动获取并设置相应的变量

例:

 KMutableProperty0<Boolean> prop = PropUtils.javaProp(this, t -> t.showAnotherWindow, (t, r) -> { t.showAnotherWindow = r; }); _begin("Another Window", prop); 

所以,我想尝试一下,并在Java中实现以下内容。

吸气 :

 @FunctionalInterface public interface Getter<T> { T get(); } 

二传手 :

 @FunctionalInterface public interface Setter<T> { void set(T type); } 

然后是类本身 (我只写了构造函数,所有的方法都是由接口请求并由IDE自动实现的):

 public class JavaProp <T> implements KMutableProperty0<T> { private imgui.Getter<T> getter; private imgui.Setter<T> setter; public JavaProp(imgui.Getter<T> getter, imgui.Setter<T> setter) { this.getter = getter; this.setter = setter; } @Override public void set(T t) { setter.set(t); } @NotNull @Override public Setter<T> getSetter() { return null; } @Override public T get() { return getter.get(); } @Nullable @Override public Object getDelegate() { return null; } @NotNull @Override public Getter<T> getGetter() { return null; } @Override public T invoke() { return null; } @Override public boolean isLateinit() { return false; } @Override public boolean isConst() { return false; } @NotNull @Override public String getName() { return null; } @NotNull @Override public List<KParameter> getParameters() { return null; } @NotNull @Override public KType getReturnType() { return null; } @NotNull @Override public List<KTypeParameter> getTypeParameters() { return null; } @Override public T call(Object... objects) { return null; } @Override public T callBy(Map<KParameter, ?> map) { return null; } @Nullable @Override public KVisibility getVisibility() { return null; } @Override public boolean isFinal() { return false; } @Override public boolean isOpen() { return false; } @Override public boolean isAbstract() { return false; } @NotNull @Override public List<Annotation> getAnnotations() { return null; } } 

但每当我尝试运行,我得到以下几点:

错误:(45,12)java:对Getter的引用是不明确的

kotlin.reflect.KProperty0中的接口kotlin.reflect.KProperty0.Getter和kotlin.reflect.KProperty match中的接口kotlin.reflect.KProperty.Getter

有问题的功能是这样的:

  @NotNull @Override public Getter<T> getGetter() { return null; } 

而相关的文件是kotlin.reflect.KProperty.tk ,你可以在这里找到它

任何想法我怎么能解决它?

只需指定您的意思是:

 public KProperty0.Getter<T> getGetter() 

但我宁愿在Kotlin中实现这个类,只从Java中使用它。