gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:40:36 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com