[英]Implementing a kotlin interface in java
所以,在这个问题之后 ,我基本上利用反射传递原始引用来修改原语本身,如:
_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中匹配接口kotlin.reflect.KProperty.Getter
有问题的功能是这一个 :
@NotNull
@Override
public Getter<T> getGetter() {
return null;
}
相关文件是kotlin.reflect.KProperty.tk
,你可以在这里找到它
知道怎么解决呢?
只需指定您的意思:
public KProperty0.Getter<T> getGetter()
但我更愿意在Kotlin中实现该类,并且只从Java中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.