java 所有类和方法_Java获取类中的所有方法

private Method[] getClassMethods(Class>cls) {

Map uniqueMethods = new HashMap();

Class> currentClass =cls;while (currentClass != null && currentClass != Object.class) {

addUniqueMethods(uniqueMethods, currentClass.getDeclaredMethods());//获取接口中的所有方法

Class>[] interfaces =currentClass.getInterfaces();for (Class>anInterface : interfaces) {

addUniqueMethods(uniqueMethods, anInterface.getMethods());

}//获取父类,继续while循环

currentClass =currentClass.getSuperclass();

}

Collection methods =uniqueMethods.values();return methods.toArray(newMethod[methods.size()]);

}private void addUniqueMethods(MapuniqueMethods, Method[] methods) {for(Method currentMethod : methods) {if (!currentMethod.isBridge()) {//获取方法的签名,格式是:返回值类型#方法名称:参数类型列表

String signature =getSignature(currentMethod);//检查是否在子类中已经添加过该方法,如果在子类中已经添加过,则表示子类覆盖了该方法,无须再向uniqueMethods集合中添加该方法了

if (!uniqueMethods.containsKey(signature)) {if(canControlMemberAccessible()) {try{

currentMethod.setAccessible(true);

}catch(Exception e) {//Ignored. This is only a final precaution, nothing we can do.

}

}

uniqueMethods.put(signature, currentMethod);

}

}

}

}privateString getSignature(Method method) {

StringBuilder sb= newStringBuilder();

Class> returnType =method.getReturnType();if (returnType != null) {

sb.append(returnType.getName()).append('#');

}

sb.append(method.getName());

Class>[] parameters =method.getParameterTypes();for (int i = 0; i < parameters.length; i++) {if (i == 0) {

sb.append(':');

}else{

sb.append(',');

}

sb.append(parameters[i].getName());

}returnsb.toString();

}/*** Checks whether can control member accessible.

*

*@returnIf can control member accessible, it return {@literaltrue}

*@since3.5.0*/

public static booleancanControlMemberAccessible() {try{

SecurityManager securityManager=System.getSecurityManager();if (null !=securityManager) {

securityManager.checkPermission(new ReflectPermission("suppressAccessChecks"));

}

}catch(SecurityException e) {return false;

}return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值