背景:
我有一个从WSDL文件生成的数百个XXXFaultMsg类,它们都有一个方法getFaultMsg()
,但它们直接从Exception
扩展。我有一个带有参数Exception e的函数,其中e可能是其中一个XXXFaultMsg类的实例。
挑战:
如果它是XXXFaultMsg的实例,我想在e上调用getFaultMsg()
。
我写了if (e.getClass().getName().endsWith("FaultMsg"))
来检测e是否是XXXFaultMsg的一个实例。那么如何声明一个类型为XXXFaultMsg的var并将其投射到它并在其上调用getFaultMsg()
?
P.S。我不想构建一个长if (e instanceof XXXFaultMsg)
列表,因为有超过100个XXXFaultMsg类。
答案 0 :(得分:3)
假设您有一个不带args的方法:
Method methodToFind = null;
if (e.getClass().getName().endsWith("FaultMsg")){
try {
methodToFind = e.getClass().getMethod("getFaultMsg", (Class<?>[]) null);
} catch (NoSuchMethodException | SecurityException e) {
// Your exception handling goes here
}
}
如果存在则调用它:
if(methodToFind == null) {
// Method not found.
} else {
// Method found. You can invoke the method like
methodToFind.invoke(e, (Object[]) null);
}