我想编写接受a.A或b.B类型参数的方法。 目前已实施:
import a.A;
import b.B;
...
public void doSth(A arg) {
SpecificClass.specificMethod(arg);
}
public void doSth(B arg) {
SpecificClass.specificMethod(arg);
}
我想要一个使用通配符并且只接受a.A或b.B的通用方法“doSth”。 重要信息a.A和b.B不是彼此的亚型。唯一常见的类型是java.lang.Object。
任何帮助?
答案 0 :(得分:1)
假设你可以这样做,如果A和B没有共同的超类,你将无法调用参数上的任何方法,而是调用Object的方法。
所以我认为只有两个合理的解决方案是:
答案 1 :(得分:1)
您可以将A和B都包装为扩展公共接口,如:
interface CommonWrapper {
public void doSth();
}
public class AWrapper implements CommonWrapper {
private A wrapped;
public AWrapper(A a) {
this.wrapped = a;
}
public void doSth() {
// implement the actual logic using a
}
}
public class BWrapper implements CommonWrapper {
private B wrapped;
public BWrapper(B b) {
this.wrapped = b;
}
public void doSth() {
// implement the actual logic using b
}
}
然后修改方法 doSth 以接受CommonWrapper对象作为参数:
public void doSth(CommonWrapper c) {
c.doSth();
}
答案 2 :(得分:0)
public <T> void doSth(T arg) {
SpecificClass.specificMethod(arg);
}
将被称为:
yourClass.doSth(yourarg);
但是它不限制任何可以扩展对象的东西,什么都重要。我建议让你的两个类实现一个公共接口,然后编程到该接口。