gpt4 book ai didi

Java反射,获取参数类型

转载 作者:行者123 更新时间:2023-12-04 05:16:34 26 4
gpt4 key购买 nike

我有一个带有参数的方法 callMethod:methodName (String) 和 parameters(Object[])。
现在,一开始对我来说一切似乎都很好,但我偶然发现了一个问题。
您必须知道对象的类型才能使用反射。到目前为止,我是这样确定的:

Class[] getParameterTypes(Object[] parameters) {
Class[] parameterTypes = new Class[parameters.length];
for (int i = 0; i < parameters.length; i++) {
parameterTypes[i] = parameters[i].getClass();
}
return parameterTypes;
}

callMethod 用于从外部源调用方法。当这些方法具有原始参数作为类型或接口(interface)(列表等)时,它似乎失败了,我知道为什么。

我的问题是:
有什么办法可以保持这种/类似的方式,或者唯一的解决方案是将类型信息(f.e Integer.TYPE 用于基元等)传递给上述方法:
callMethod(String methodName, Object[] parameters, Class[] parameterTypes);

谢谢你的帮助。

最佳答案

如果调用者期望基于其变量类型的重载解决方案,您的代码也会失败。例如:

void foo(String x) {}
void foo(Object x) {}

Object x = "text";
foo(x);

... 将调用 foo(Object)而不是 foo(String) ,但您的反射代码将调用 foo(String) .

现在,我们对您的用例知之甚少,无法说出这是否是一个问题。如果调用者确实知道他们想要调用哪个方法,使用哪些参数类型,那么最好传递它们。

如果上述情况不会在您的上下文中发生,您可能希望在反射代码中执行某种基本的重载解决方案:
  • 查找具有正确名称和正确数量参数的所有方法。
  • 检查每个方法以查看是否所有参数值都可分配给相应的参数类型(参见 Class.isAssignableFrom - 您可能需要单独处理原语)。
  • 如果有多个匹配方法,应用一些规则来确定调用哪个。这些规则不必与 Java 相同,但您需要确保它们是明确的。
  • 关于Java反射,获取参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192323/

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