package com.fpy.socket;
import java.lang.reflect.Method;
public class ReflectUtil {
public static Object methodInvoker(String classMethd)
throws Exception {
// 获取最后一个"."出现的下标
int lastDot = classMethd.lastIndexOf(".");
// 获取子字符串从第0下标到最后一个"."出现的下标,这个字符串即为类的全限定名称
String className = classMethd.substring(0, lastDot);
// 获取子字符串,为方法的名称
String methodName = classMethd.substring(lastDot + 1, classMethd.length() - 2);
// 根据类名获取Class对象
Class clazz = Class.forName(className);
Method method = null;
Class tmp = clazz;
// 判断次方法是否存在
while (tmp != null) {
try {
// 若存在,获取方法对象,以防是私有方法,使用getDeclaredMethod方法获取
method = tmp.getDeclaredMethod(methodName);
break;
} catch (NoSuchMethodException e) {
// 若不存在,在父类中获取此方法
tmp = tmp.getSuperclass();
}
}
Object object = clazz.newInstance();
// 根据Class对象创建对象
// 突破私有方法的禁锢性
method.setAccessible(true);
return method.invoke(object);
}
public static void main(String[] args) {
try {
Object object = methodInvoker("java.lang.String.length()");
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
写一个类ReflectUtil类, 类中写一个静态方法Object methodInvoker(String classMethd) 此方法为无参方法如, 我们传入的实参字符串为:classMeth
最新推荐文章于 2022-12-23 11:57:29 发布