gpt4 book ai didi

java - 动态地将Object实例转换为真正的子类实例

转载 作者:行者123 更新时间:2023-12-01 21:08:23 25 4
gpt4 key购买 nike

背景:

我有数百个从 WSDL 文件生成的 XXXFaultMsg 类,它们都有一个方法 getFaultMsg() 但它们是直接从 Exception 扩展的。我有一个带有参数 Exception e 的函数,其中 e 可能是 XXXFaultMsg 类之一的实例。

挑战:

如果 e 是 XXXFaultMsg 的实例,我想在 e 上调用 getFaultMsg()

我编写了 if (e.getClass().getName().endsWith("FaultMsg")) 来检测 e 是否是 XXXFaultMsg 的实例。那么我如何声明一个类型为 XXXFaultMsg 的 var 并将 e 转换为它并对其调用 getFaultMsg()

附注我不想构造一长串 if (e instanceof XXXFaultMsg) 因为有超过 100 个 XXXFaultMsg 类。

最佳答案

假设您有一种不带参数的方法:

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

关于java - 动态地将Object实例转换为真正的子类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41885380/

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