假设我有这些接口:
public interface I1 {
void foo();
}
public interface I2 {
void bar();
}
和课程:
public class A extends AParent implements I1, I2 {
// code for foo and bar methods here
}
public class B extends BParent implements I1, I2 {
// code for foo and bar methods here
}
public class C extends CParent implements I1 {
// code for foo method here
}
现在,通过泛型,我可以拥有如下方法:
public <T extends I1 & I2> void method(T param) {
param.foo();
param.bar();
}
我可以使用 A 和 B 作为参数来调用它,但不能使用 C (它没有实现 I2)。
有没有办法实现这种类型的类型安全预泛型(java
考虑到 A、B 和 C 具有不同的继承树,并且像 AParent 和 BParent 本身拥有共同父级这样的操作并不是真正的选择。
我知道你可以这样做:
public void method(I1 param) {
param.foo();
((I2)param).bar();
}
但你也可以打电话method(new C())
它没有实现 I2,所以你会遇到麻烦。
那么还有其他方法可以做到这一点吗?
附: : 我其实没有必要这样做,我主要是出于好奇才问的。
创建第三个接口 I3 扩展 I1 和 I2。那么A类和B类都实现了I3,并且泛型方法接受I3。
这也许是唯一的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)