62,620
社区成员
发帖
与我相关
我的任务
分享
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class TestBind {
public static List<MethodHandle> findAllMethod(Class<?> c, MethodType methodType) {
Method[] method = c.getDeclaredMethods();
List<MethodHandle> methodHandles = new ArrayList<MethodHandle>();
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle methodHandle = null;
for(int i = 0; i < method.length; i++) {
//method[i].setAccessible(true);
try {
methodHandle = lookup.findVirtual(c, method[i].getName(), methodType);
} catch (NoSuchMethodException e) {
continue;
} catch (IllegalAccessException e) {
System.out.println(method[i].getName() + "方法不可访问!");
} finally {
if(methodHandle != null) {
System.out.println(method[i].getName());
Class<?>[] classes = method[i].getParameterTypes();
for(int j = 0; j < classes.length; j++) {
System.out.print(classes[j].getSimpleName() + " ");
}
methodHandles.add(methodHandle);
}
methodHandle = null;
}
}
return methodHandles;
}
public static void main(String args[]) throws Throwable {
List<MethodHandle> list = findAllMethod(String.class, MethodType.methodType(String.class, int.class, int.class));
}
}