gpt4 book ai didi

java - 通用接口(interface)错误

转载 作者:行者123 更新时间:2023-12-01 16:48:59 24 4
gpt4 key购买 nike

运行以下代码:

public static void get(FirebaseObject o, final Class<? extends  FirebaseObject> cls, final
Callback<? extends FirebaseObject> callback) {
FirebaseDatabase.getInstance().getReference().child(o.getPath())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
FirebaseObject o = dataSnapshot.getValue(cls);
o.setKey(dataSnapshot.getKey());
cls.cast(o);
callback.onSuccess(cls.cast(o));
}

@Override
public void onCancelled(DatabaseError databaseError) {
callback.onError(databaseError);
}
});
}

public interface Callback<F extends FirebaseObject> {
void onSuccess(F firebaseObject);
void onError(DatabaseError error);
}

我在 callback.onSuccess(cls.cast(o)); 处收到错误:

`onSuccess <capture ? extends FirebaseObject> in Callback cannot be applied to <capture ? extends FirebaseObject>`

基本上我正在尝试通过 Class<? extends FirebaseObject> cls onSuccess() 中给出,设置 key 后。

这个错误有解决办法吗?或者实现目标的替代实现?

最佳答案

final Class<? extends  FirebaseObject> cls,
final Callback<? extends FirebaseObject> callback

当这两个参数有单独的时? extends 约束,它们有可能引用两个不同的子类。如果您有两个子类 class A extends FirebaseObjectclass B extends FirebaseObject,则参数可以是

final Class<A> cls, final Class<B> callback

如果是这种情况,那么 callback.onSuccess(cls.cast(o)) 将不起作用,因为 cls.cast(o) 将返回 A 对象和 onSuccess 需要一个 B

如果您希望它们引用同一个类,那么您需要通过为其分配一个名称来明确这一点。

public static <T extends FirebaseObject> void get(
FirebaseObject o, final Class<T> cls, final Callback<T> callback)

关于java - 通用接口(interface)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44487155/

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