Java 接口(interface) - 泛型

标签 java generics

我有两个接口(interface)。一个接口(interface) A 和接口(interface) B,它扩展了接口(interface) A。现在,我有一个类,它喜欢保留对实现 A 或 B 的对象的引用。我想为它提供 setter。我在下面尝试过,但出现类型不匹配异常。

public interface A {
}

public interface B extends A {
}

public class AB {
private Class<? extends A> object;

public void setObject(Class<? extends A> o){
   this.object = o;
}
}

所以基本上,我希望 setObject 方法接受一个实现接口(interface) A 或 B 的对象。

最佳答案

简单的回答:

输入A:setObject(A a)

实现了B 的类也实现了A。完整代码:

public class UsesA {
  private A a;

  public void setObject(A a){
    this.a = a;
  }
}

现在,如果您真的想使用 B,您可以将其键入 B,这也允许您将其视为 A ,因为 B 继承自它:

public class UsesB {
  private B b; // can call A's methods on this field

  public void setObject(B b) {
    this.b = b;
  }
}

但是现在您不能将A(静态)引用传递给setObject。如果你真的想这样做,那么你需要先将它向下转换为 B,这可能会在运行时失败。泛型不会对此进行改进。

关于Java 接口(interface) - 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273834/

相关文章:

java - Java 中的额外导入会减慢代码加载时间吗?

java - 在 Java 中,为什么我的字节数组的元素包含 2 个字节?

java - 使用mapstruct从字符串到枚举

c++ - 通用数据库管理器(包装器)

arrays - 如何为函数的通用数组参数(而不是其 Generator.Element)添加类型约束(协议(protocol)一致性)

java - 使用 Apache POI 写入 xls 文件时出现堆错误

Java 泛型 - 类型删除后的方法

c# - 通过引用传递索引器访问的泛型集合中对象的成员

java - 静态方法的泛型

java - < 和有什么区别? super E> 和 <?扩展 E>?