Java 反射
2021-01-24 本文已影响0人
醉红尘_acb4
Java 反射
Method[] methods = o.getClass().getMethods(); //获取方法集
for (Method c : methods){
System.out.println("方法名:" + c.getName);
/*获取方法,方法名,参数类型...*/
Method method = o.getClass().getMethod(c.getName(), Object.class);
/*调用方法,当前对象,赋予值*/
method.invoke(o, "张三");
}
Field[] fields = o.getClass().getDeclaredFields(); //获取字段集
for (Field field : fields){
/*判断字段是否存在*/
boolean annotationPresent = field.isAnnotationPresent(ResultValue.class);
if (annotationPresent){
field.setAccessible(true); /*允许访问私有变量*/
field.set(o, os); /*字段赋值*/
}
}
类方法
类别 | 说明 |
---|---|
Class<?> | |
Class.forName(String className) | 通过(全路径)类名,获取类对象 |
getConstructors() | 获取构造函数集合 |
getConstructor(String var1) | 获取构造函数 |
getDeclaredConstructors() | 获取声明的构造函数集合 |
getDeclaredConstructor(String var1) | 获取声明的构造函数 |
getMethods() | 获取方法集合 |
getMethod(String var1) | 获取方法 |
getDeclaredFields() | 获取声明的字段集合 |
getDeclaredField(String var1) | 获取声明的字段 |
其他方法
isAnnotationPresent() //是否存在注解
getAnnotation(Class<T> annotationClass); //获取注解
setAccessible(boolean flag) //是否允许访问私有变量
method.invoke(Object var1,Object var2); //执行方法
field.set(Object var1, Object var2); //字段赋值