MethodType问题

摆烂办不到 2014-03-03 08:35:37

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));









}
}




以上代码编译运行结果
substring
int int
substring
int

也就是lookup.findVirtul()方法找到了方法名均为substring 但参数不同的的两个方法

我在给findVirtul()方法传参数的时候指定了
MethodType.methodType(String.class, int.class, int.class)

为什么出现了
substring
int

这个结果?
...全文
205 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
摆烂办不到 2014-05-06
  • 打赏
  • 举报
回复
求大神解答!
摆烂办不到 2014-03-13
  • 打赏
  • 举报
回复
JAVA7的内容了
  • 打赏
  • 举报
回复
import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; 这是个什么版本的东西?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧