我有一个混淆的jar文件中的SingletonA
和SingletonB
类。它们没有实现相同的接口,也不是同一个超类的孩子,但它们确实具有相似的特征,这是原始程序员错过的。
我希望能够将它们作为参数传递给像这样的方法:
public void method(SingletonObject singleton) {
//do stuff with singleton
}
但是,我唯一能想到的就是这个:
public void method(Object singleton) {
if(singleton instanceof SingletonA) {
SingletonA singletonA = (SingletonA) singleton;
// do stuff with singletonA
}
else if(singleton instanceof SingletonB) {
SingletonB singletonB = (SingletonB) singleton;
//do exact same stuff with singletonB
}
else {
return;
}
}
由于底部示例很糟糕,我该怎么做才能让它看起来更像顶部。
答案 0 :(得分:2)
如果您知道这两个不同的类存在某种方法,那么您可以使用反射
public void method(Object singleton) {
Class<?> clazz = singleton.getClass();
Method m;
try {
m = clazz.getDeclaredMethod("someCommonMethod");
//m.setAccessible(true);
m.invoke(singleton);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:1)
作文也可以是一个选项:
class SingletonObject{
SingletonA a;
SingletonB b;
SingletonObject(SingletonA a, SingletonB b){
if(a==null && b==null){
throw InvalidArgumentException();
}
this.a = a;
this.b =b
}
public void callCommonMethod(){
if(a!=null){
a.callCommonMethod();
}else{
b.callCommonMethod()
}
}
}
所以你在一个类中组合单个对象,任何人都可以使用它而不知道它们背后是什么