使用反射获取类的信息
反射获取类的信息是通过Class类获取的,常用方法:
String getName()
获取类的包名路径,如com.company.Person
String getSimpleName()
获取类的名称,如Person
Field[] getFields()
获取类所有public访问权限的变量,包括继承父类的
Field[] getDeclaredFields()
获取类所有访问权限的变量,但不包括继承的
Method[] getMethods()
获取类所有public的方法,包括继承的
Method[] getDeclaredMethods()
获取类所有访问权限的方法,但不包括继承的
反射获取类的变量的信息是通过Field类获取的,常用方法:
反射获取类的方法的信息是通过Method类获取的,常用方法:
String getName()
获取方法名称
int getModifiers()
获取方法的访问权限
Class<?> getReturnType()
获取方法的返回值类型
Parameter[] getParameters()
获取方法的参数列表
通过反射获取注解信息
Annotation[] getAnnotations()
获取所有注解,包括继承的注解
Annotation[] getDeclaredAnnotations()
获取本元素的所有注解,不包含父类继承而来的
<T extends Annotation> T getAnnotation(Class<T> annotationClass)
获取指定的注解
<T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
获取本元素的指定注解
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
判断当前元素是否被指定注解修饰
访问或操作类的私有方法
package reflect;
public class TestClass {
private void privateMethod(String head , int tail){
System.out.print(head + tail);
}
}
通过反射调用TestClass的privateMethod方法
public static void getPrivateMethod() throws Exception{
TestClass testClass = new TestClass();
Class mClass = testClass.getClass();
// 获取类的方法,第一个参数是方法名称,第二、三个参数是方法的参数类型
Method privateMethod = mClass.getDeclaredMethod("privateMethod", String.class, int.class);
if (privateMethod == null) {
return;
}
// 获取私有方法的访问权,并不是修改实际权限
privateMethod.setAccessible(true);
// 使用invoke调用方法,第一个参数是类的对象,后面两个参数是方法的实参
privateMethod.invoke(testClass, "Java Reflect ", 666);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。