我在混淆的jarfile中有SingletonASingletonB类。它们没有实现相同的接口,也不是相同的超类的子级,但是它们确实具有相似的特性,这是原始程序员所忽略的。

我希望能够将它们作为参数传递给这样的方法:

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();
        }
  }

07-27 13:35