我有两个接口(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/