忽略大小写敏感的“methodName”以获取 Java 中的类的方法

Hos*_*ahi 5 java reflection

我想以这种方式获得一个类的方法:

int value = 5;
Class paramType = value.getClass();
String MethodName = "myMethod";
Class<?> theClass = obj.getClass();
Method m = theClass.getMethod(MethodName, paramType);
Run Code Online (Sandbox Code Playgroud)

是否可以忽略MethodName区分大小写?例如,如果有一个方法theClasswith name foo,我怎么能找到它MethodName=fOO呢?

Mur*_*nik 6

Java 区分大小写,所以没有这样的内置方法。但是,您可以通过迭代所有方法并检查它们的名称和参数类型来自己实现它:

public List<Method> getMethodsIgnoreCase
    (Class<?> clazz, String methodName, Class<?> paramType) {

    return Arrays.stream(clazz.getMethods())
                 .filter(m -> m.getName().equalsIgnoreCase(methodName))
                 .filter(m -> m.getParameterTypes().length ==  1)
                 .filter(m -> m.getParameterTypes()[0].equals(paramType))
                 .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

注意:此方法查找具有与给定类型匹配的单个参数的方法,以匹配 OP 中的要求。不过,它可以很容易地推广到接收参数类型的列表/数组。