运行以下代码:
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 FirebaseObject
和 class 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/