Java获取类中的所有方法

java

一、获取当前类定义的所有方法,不包括父类和接口的

class.getDeclaredMethods()

eg:

import java.lang.reflect.Method;

public class testH {

//获取java类的所有方法并打印出来

public static void main(String args[]) {

Class c = SSOUtil.class;

Method[] m = c.getDeclaredMethods();

for (int i = 0; i < m.length; i++) {

System.out.println(m[i].getName());

}

}

}

会返回当前类定义的所有方法(包括私有的、静态的、抽象的),但是不会返回接口和父类中定义的方法

二、获取当前类所有的public方法,包括父类和接口的

class.getMethods()

会返回当前类所有的public方法,包括接口和父类中定义的public方法。

三、获取当前类中所有的方法,包括父类和接口的

private Method[] getClassMethods(Class<?> cls) {

Map<String, Method> uniqueMethods = new HashMap<String, Method>();

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<Method> methods = uniqueMethods.values();

return methods.toArray(new Method[methods.size()]);

}

private void addUniqueMethods(Map<String, Method> uniqueMethods, 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);

}

}

}

}

private String getSignature(Method method) {

StringBuilder sb = new StringBuilder();

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

}

return sb.toString();

}

/**

* Checks whether can control member accessible.

*

* @return If can control member accessible, it return {@literal true}

* @since 3.5.0

*/

public static boolean canControlMemberAccessible() {

try {

SecurityManager securityManager = System.getSecurityManager();

if (null != securityManager) {

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

}

} catch (SecurityException e) {

return false;

}

return true;

}

转载自:https://blog.csdn.net/u011983531/article/details/80248945

以上是 Java获取类中的所有方法 的全部内容, 来源链接: utcz.com/z/392441.html

回到顶部