java - 包装不可编辑的单例类

标签 java design-patterns singleton

我有 SingletonASingletonB,这些类在混淆的 jar 文件中。它们不实现相同的接口(interface),也不是同一个父类(super class)的子级,但它们确实具有相似的特性,这是最初的程序员所忽略的。

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

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

关于java - 包装不可编辑的单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765406/

相关文章:

java - 访客模式的使用

java - Google App Engine(或更一般地在分布式服务器环境中)中的单例如何工作?

java - 通用列表中的编译错误

java - 为什么 google-collections 包含语义相同的函数和奇怪的泛型?

java - repaint() JFrame 和 JPanel

java - 如何在 Windows 7 命令行上执行 .jar java 程序?

java - 基于不同输入实现多种策略的设计模式

c# - 未经 Microsoft 许可,我可以使用 MSDN 中的示例代码吗?

java - 为mongo创建单例类

c++ - 使用单例模式的简单 C++ 记录器