我有一个SomeInterface
并且我有许多实现此接口的类。所有这些类的someMethod()
都没有被接口定义。
假设我有someVariable
类型的变量SomeInterface
,我想在其上调用someMethod()
。一种方法是向SomeInterface
投降SomeClass
以实现SomeInterface
,并在其上调用someMethod
,如下所示:
((SomeClass) someVariable).someMethod()
但我不知道实现SomeInterface
的哪个类存储在someVariable
中。什么是调用方法的替代干净方法,该方法由底层类实现,但未由我编码的接口定义。
答案 0 :(得分:1)
您可以使用反射来调用方法
public static void main(String[] args) {
TestI t = new Test();
Class c = t.getClass();
try {
Method m = c.getDeclaredMethod("someMethod");
m.invoke(t);
} catch (Exception e) {
e.printStackTrace();
}
}
此处TestI
是一个没有someMethod
的界面。使用反射获取类的方法并在t中调用方法someMethod
对象
答案 1 :(得分:1)
您可以在致电someVariable
之前检查SomeClass
是否存储someMethod
个实例
if (someVariable instanceof SomeClass) {
((SomeClass)someVariable).someMethod();
} else {
// do something else
}
答案 2 :(得分:1)
最脏的解决方案是使用反射,使用instanceof
稍微不那么脏,但仍然不是最佳的。最简单的解决方案是使用someMethod()
创建另一个接口,并使类也实现该接口。然后你可以转换到该接口并调用该方法。
((SomeInterface) someVariable).someMethod();
这当然要求您能够修改有问题的类。