假设有两个类 Foo
和 Bar
。它们不扩展相同的类(Object
类除外)或实现相同的接口(interface)。然而,它们都有一个具有相同签名的方法。这些类(class)不是我的;它们无法改变。有没有办法对方法 meth
使用某种通用调用,就好像这两个类扩展了同一个类或实现了同一个接口(interface)?
class Foo {
public void meth(String s) {
}
}
class Bar {
public void meth(String s) {
}
}
最佳答案
您可以使用反射,但类型不安全。根据对象运行时间,您可以调用特定方法。
import java.lang.reflect.Method;
try
{
Object f1 = new Foo();
Object f2 = new Bar();
Class c1 = f1.getClass();
Class[] param = new Class[1];
param[0] = String.class;
Method method;
method = c1.getDeclaredMethod("meth", param);
method.invoke(f1, "$$$$$$$$$$$$$$");
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
关于java - 泛型调用不同类中的方法,但具有相同的方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039337/