0
点赞
收藏
分享

微信扫一扫

java反射实战

乐百川 2022-03-19 阅读 14
java

Java反射是JAVA的一个bug级的存在
我们可以利用java反射去获取任何字段、任何类。
包括私有的。

获取类模板的两种方式

Class<Blog> blogClass =Blog.class;

Blog blog =new Blog();
Class<? extends Blog> blogclass1 =blog.getClass();

这样我们就可以利用类模板进行操作了:

我们可以利用blogclass 或者blogclass1来操作

System.out.println(blogClass.getName());

在这里插入图片描述

私有方法用getDeclaredField,非私有字段用getFileld

System.out.println(blogClass.getDeclaredField("id"));

在这里插入图片描述

操作私有字段,修改值

Field blog_id=blogClass.getDeclaredField("id");
//因为是私有,需要加上这个
blog_id.setAccessible(true);
blog_id.set(blog,1L);

获取这个字段的注解(注解有三种生命周期:source class Runtime)

blog_id.getAnnotation(注解名.class);

获取该对象的这个一值

blog_id.get(blog);

获取构造器

Constructor<?>[] declaredConstructors=blogClass.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
    System.out.println("declaredConstructor = " + declaredConstructor);
}

在这里插入图片描述

获取无参构造器,并新生成一个对象o

if(declaredConstructor.getParameterCount()==0){
    System.out.println("declaredConstructor = " + declaredConstructor);
    Object o =declaredConstructor.newInstance();
}

注意获取的对象是Object 类型,需要强转

Object o =declaredConstructor.newInstance();
//强转一下
Blog o1=((Blog) o);

获取方法,并执行方法(参数是对象名)

Method tagsToIds = blogClass.getDeclaredMethod("tagsToIds");
tagsToIds.invoke(blog);
举报

相关推荐

0 条评论