美文网首页
Java反射与joor反射库的使用

Java反射与joor反射库的使用

作者: DevinSun | 来源:发表于2017-12-05 17:00 被阅读0次

java原生反射的使用

反射构造对象

  //获得指定对象的构造方法,参数值传入与构造方法参数对应的类型
  Constructor<?> constructors = peopleClass.getConstructor(String.class);

  //分为无参和有参,参数传入与构造方法参数对应的值,获得对象引用
  People people = (People) constructors.newInstance("Devin");

反射方法

函数 作用 备注
getDeclaredMethod 获取指定的 private、protected、default、public 的函数 只能取到的该类自身中定义的函数,从父类中继承的函数不能够获取到。
getDeclaredMethods 获取全部的 private、protected、default、public 的函数 只能取到的该类自身中定义的函数,从父类中继承的函数不能够获取到。
getMethod 获取指定的 public 函数 父类中的公有函数也能够获取到
getMethods 获取全部的 public 函数 父类中的公有函数也能够获取到
setAccessible() 设置该方法是否可被访问 设置true表示可以访问该方法
invoke() 调用该方法,第一个参数表示该方法所在类的对象,第二个参数传入该方法所需的参数值 如果该方法有返回值,则返回方法执行后的返回值,如果没有,则返回null
People people = new People("lisi");
Class<? extends People> aClass = people.getClass();
 Method method = aClass.getDeclaredMethod("setAge", int.class);
//设置true表示可以访问该方法 
method .setAccessible(true);
//调用此方法,如果方法有返回值,则返回方法执行后的返回值,如果没有,则返回 null
Object obj=method .invoke(people, 20);

反射字段

函数 作用 备注
getDeclaredField 获取指定的 private、protected、default、public 的字段 只能取到的该类自身中定义的字段,从父类中继承的字段不能够获取到。
getDeclaredFields 获取全部的 private、protected、default、public 的字段 只能取到的该类自身中定义的字段,从父类中继承的字段不能够获取到。
getField 获取指定的 public 字段 父类中的公有字段也能够获取到
getFields 获取全部的 public 字段 父类中的公有字段也能够获取到
setAccessible() 设置该字段是否可被访问 设置true表示可以访问该字段
set()/setInt()/... 修改字段的值 第一个参数为字段所在的类的对象,第二个参数为要修改的值 (final 字段是不可修改的)
get()/getInt()/... 获取字段的值 参数为属性所在的类的对象,表示获取该类的该属性,
People people = new People("lisi");
Class<? extends People> aClass = people.getClass();
Field field = aClass.getDeclaredField("name");
field .setAccessible(true);
String name = (String) field .get(people);

joor反射库的使用

github:
https://github.com/jOOQ/jOOR
中文 README:
https://github.com/tianzhijiexian/Android-Best-Practices/blob/master/2015.9/reflect/README%20-%20chinese.md

String name = null;
        Kale kale;
        // 【创建类】
        kale = Reflect.on(Kale.class).create().get(); // 无参数 
        kale = Reflect.on(Kale.class).create("kale class name").get();// 有参数
        System.err.println("------------------> class name = " + kale.getClassName());

        // 【调用方法】
        Reflect.on(kale).call("setName","调用setName");// 多参数
        System.err.println("调用方法:name = " + Reflect.on(kale).call("getName"));// 无参数
        
        // 【得到变量】
        name = Reflect.on(kale).field("name").get();// 复杂
        name = Reflect.on(kale).get("name");// 简单
        System.err.println("得到变量值: name = " + name);
        
        // 【设置变量的值】
        Reflect.on(kale).set("className", "hello");
        System.err.println("设置变量的值: name = " + kale.getClassName());
        System.err.println("设置变量的值: name = " + Reflect.on(kale).set("className", "hello2").get("className"));  

相关文章

  • Java反射与joor反射库的使用

    java原生反射的使用 反射构造对象 反射方法 反射字段 joor反射库的使用 github:https://gi...

  • JOOR(反射库)使用

    github: https://github.com/jOOQ/jOOR 官方介绍 jOOR - Fluent R...

  • Java 推荐一个简化反射操作代码的优雅写法

    Java 中反射的写法和相关第三方封装库虽然很多,但笔者还是钟爱于 JOOR,链接 https://github....

  • 反射相关知识及jOOR反射库介绍

    反射是什么 反射(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序获取自身的信息...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • java 反射真的慢吗?

    大家似乎有个默认的常识:java的反射性能不好,应该使用asm、cglib之类的库替代。 看java的反射实现会有...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • java之反射的应用

    Java的反射库是一个被精心设计的工具集,使用它编写和动态的操纵java代码。 那么java的反射能做什么呢?官方...

  • CoreJava笔记 - 范型程序设计(5)

    反射与范型 由于类型擦除,反射无法得到关于范型类型参数的信息。 范型的Class类在Java的反射库中,Class...

  • java的反射功能

    rovider的调用都会用到java的反射功能,有人说使用反射会慢,那么到底慢在哪里呢? 反射 反射使JAVA语言...

网友评论

      本文标题:Java反射与joor反射库的使用

      本文链接:https://www.haomeiwen.com/subject/nnecixtx.html