通过反射找到签名不完全清楚的方法

时间:2018-09-27 08:29:04

标签: java reflection

尝试通过其签名(名称和参数类型列表)查找方法时,将得到单个结果:

Method java.lang.Class.getMethod(String name, Class<?>... parameterTypes)

让我知道parameterTypes的长度以及除一个参数类型外的所有参数类型,因为在运行时传递给我的参数为null时,我无法派生该参数的类。 所以我想通过方法名称和已知参数类型的数组来获取所有方法。如果发生这种情况,那么结果将是单个方法,否则将其调用,否则将引发异常。

是否有一种不错的方法可以做到这一点,而不必重新实现JDK的'getMethod'?

1 个答案:

答案 0 :(得分:0)

获取这种方法的唯一方法是使用getMethods()并手动将其过滤掉,这并不难,对于每种方法只需进行简单的检查。

但是,如果您只需要调用方法,则可以使用更多的动态方式(但是它也会变慢,因为您无法缓存Method实例)

public static void main(String[] args) throws Exception {
    Expression someMethod = new Expression(Tezd.class, "someMethod", new Object[]{1, 2, null, "huh"});
    someMethod.execute();
    System.out.println(someMethod.getValue());
}

public static String someMethod(int a, int b, Object object, String str) {
    return a + ", " + b + ", " + object + ", " + str;
}

第一个参数是目标,我使用了类,因为这是静态方法,对于普通方法,只需在此处传递对象即可。

java.beans.Expression用来获取匹配方法的可悲方法不是公开的。