gpt4 book ai didi

方法参数是接口(interface)的Java反射

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:35 24 4
gpt4 key购买 nike

首先让我说我正在维护其他人设计不佳的代码,所以我可以更改它的程度有限。

现在发生的事情是他们创建了一系列由反射调用的方法。其中一种方法将 Map 作为其参数之一。在运行时,这个 Map 是用 Hashtable 实现的。

这就是问题所在 - 我得到了一个 NoSuchMethodException,因为它正在寻找一个以 Hashtable 作为参数的方法,即使 Hashtable 实现了 Map 接口(interface)。令我困惑的是,如果我不使用反射(在这种情况下是一个主要的设计更改)并传递一个哈希表,它将调用带有 Map 参数的方法——那么为什么当我使用反射时它的工作方式不同?

考虑到我几乎必须坚持使用反射,当我向它传递一个实现该接口(interface)的类时,是否有任何方法可以调用带有 Map 参数的方法?

如果你愿意,我可以模拟一些代码来演示......

最佳答案

如果您使用 java.lang.Class 中的 getMethod(String name, Class[] parameterTypes),您需要指定方法签名中表示的参数类型接口(interface)的类型(静态类型),而不是运行时对象的类型(动态类型)。

因此,对于 methodXyz(Map map),而不是:

Method m = cl.getMethod("methodXyz", new Class[]{argument.getClass()});

这样做:

Method m = cl.getMethod("methodXyz", new Class[]{Map.class});

关于方法参数是接口(interface)的Java反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558620/

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