我在混淆的jarfile中有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;
}
}
由于最下面的例子很糟糕,我该怎么做才能使其看起来更像最上面的例子。
最佳答案
如果您知道这两个不同的类存在某种方法,则可以使用反射
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();
}
}