有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java反射匹配形式参数列表和实际参数列表

假设我有一个这样的类Foo

public class Foo {
    public void setParameter(String name, Object value) {
       // ...
    }
}

我想通过反射得到setParameter方法

问题是,在我的代码中,当我需要得到这个方法时,我只知道实际的参数。我建立了一个小方法,可以给我实际参数的Class数组。不幸的是,从实际参数{}返回的Class数组与形式参数{}和getDeclaredMethodClass数组不匹配NoSuchMethodException

你知道有任何库或代码片段可以帮助匹配该方法吗


共 (1) 个答案

  1. # 1 楼答案

    在找到要调用的方法时,您可能需要更聪明一点。一个选项是从^{}遍历每个方法,首先检查方法的名称,看它是否是您想要调用的方法,然后检查实际参数的数量是否与形式参数的数量匹配,最后,如果这两个都是真的,遍历其实际参数,并检查参数类是否可从形式参数类赋值

    然而,有一个问题是,如果你有这些方法会发生什么:

    public void setParameter(String name, Object value);
    public void setParameter(String name, String value);
    

    因为两者都将符合这个测试

    我不知道我头顶上有哪一个图书馆能以轻量级的方式处理这个问题。尽管大多数依赖注入框架(Spring、Guice)都会根据自己的需要对其提供一些支持,而且可能值得研究它们是如何工作的

    乔恩·斯基特的回答here有一个例子说明了我要解释的内容