gpt4 book ai didi

java - 在 java 中实现 kotlin 接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:06 25 4
gpt4 key购买 nike

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

_begin("另一个窗口",::showAnotherWindow)

我一直在寻找可以从 java 中实现类似功能的东西,目前我正在使用普通原始数组:

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

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

例子:

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

_begin("Another Window", prop);

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

Getter :

@FunctionalInterface
public interface Getter<T> {

T get();
}

Setter :

@FunctionalInterface
public interface Setter<T> {

void set(T type);
}

然后是 class itself (我只是写了构造函数,所有的方法都是接口(interface)请求的,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;
}
}

但是每当我尝试运行它时,我都会得到以下信息:

Error:(45, 12) java: reference to Getter is ambiguous

both interface kotlin.reflect.KProperty0.Getter in kotlin.reflect.KProperty0 and interface kotlin.reflect.KProperty.Getter in kotlin.reflect.KProperty match

有问题的函数是这个 one :

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

相关文件是kotlin.reflect.KProperty.tk,可以找到here

知道我该如何解决吗?

最佳答案

只需指定您所指的接口(interface):

public KProperty0.Getter<T> getGetter()

但我更愿意在 Kotlin 中实现该类,并且只从 Java 中使用它。

关于java - 在 java 中实现 kotlin 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com