在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中使用它。