java - 通用接口(interface)错误

标签 java interface

运行以下代码:

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/

相关文章:

c# - 为什么 C# 接口(interface)方法没有声明为抽象或虚拟?

java - 从 Eclipse 中调试 gradle 测试

java - 使用 Hibernate Schema Updater 创建表时出错

java - 调用KeyTool,重定向System.out没有效果

java - 将字符串转换为类?

javascript - 如何在W3 JS中解析JSON对象

java - 接口(interface)的子类如何被调用

javascript - TypeScript 中的多类继承

json - 在 Golang 中访问 map[string]interface{} 类型的嵌套映射

java - 具有通用签名的接口(interface)中的静态方法