博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jOOR
阅读量:6722 次
发布时间:2019-06-25

本文共 4175 字,大约阅读时间需要 13 分钟。

--摘自《android插件化开发指南》

1.jOOR库就一个Reflect.java类很重要

2.Reflect.java包括6个核心方法

  1)on:包裹一个类或者对象,表示在这个类或对象上进行反射

  2)create:用来调用之前的类的构造方法

  3)call:方法调用

  4)get:获取(field和method返回)值

  5)set:设置属性值

No1:

根据字符串获取一个类

import static com.example.reflectiontest.Reflect.on;Reflect r1 = on(Object.class);Reflect r2 = on("java.lang.Object");Reflect r3 = on("java.lang.Object",ClassLoader.getSystemClassLoader());Object o1 = on(Object.class).get();Object o2 = on("java.lang.Object").get();String j2 = on((Object)"abc").get();int j3 = on(1).get();System.out.println(r1.toString());System.out.println(r2.toString());System.out.println(r3.toString());System.out.println(o1.toString());System.out.println(o2.toString());System.out.println(j2.toString());System.out.println(j3);----------------------class java.lang.Objectclass java.lang.Objectclass java.lang.Objectclass java.lang.Objectclass java.lang.Objectabc1

No2:

调用类的构造函数

public class TestClassCtor {    private static String name;    public TestClassCtor() {        name = "baobao";    }    public TestClassCtor(int a) {    }    public TestClassCtor(int a, String b) {        name = b;    }    private TestClassCtor(int a, double c) {    }    @Override    public String toString() {        return name;    }    public static String getName() {        return name;    }}
TestClassCtor r = new TestClassCtor();Class temp = r.getClass();String className = temp.getName();System.out.println(className);//public构造函数Object obj = on(temp).create().get();//无参Object obj2 = on(temp).create(1, "abc").get();//有参System.out.println("obj:" + obj.toString());System.out.println("obj2:" + obj2.toString());//private构造函数TestClassCtor obj3 = on(TestClassCtor.class).create(1, 1.1).get();String a = obj3.getName();System.out.println("a:" + a);----------------com.example.reflectiontest.TestClassCtorobj:abcobj2:abca:abc

No3:

调用类的私有方法

public class TestClassCtor {    private static String name;    public TestClassCtor() {        name = "baobao";    }    public TestClassCtor(int a) {    }    public TestClassCtor(int a, String b) {        name = b;    }    private TestClassCtor(int a, double c) {    }    private String doSomething(String d) {        System.out.println("TestClassCtor,doSomething");        return "123" + d;    }}
TestClassCtor r = new TestClassCtor();Class temp = r.getClass();Reflect reflect = on(temp).create();String a1 = reflect.call("doSomething", "param1").get();System.out.println(a1);------------------TestClassCtor,doSomething123param1

No4:

调用类的私有静态方法

public class TestClassCtor {    private static String name;    public TestClassCtor() {        name = "baobao";    }    public TestClassCtor(int a) {    }    public TestClassCtor(int a, String b) {        name = b;    }    private TestClassCtor(int a, double c) {    }    private static void work() {        System.out.println("TestClassCtor,work");    }}
TestClassCtor r = new TestClassCtor();Class temp = r.getClass();Reflect reflect = on(temp).create();on(TestClassCtor.class).call("work").get();-------------------TestClassCtor,work

No5:

修改类的私有实例字段

public class TestClassCtor {    private String name;    public TestClassCtor() {        name = "baobao";    }    public TestClassCtor(int a) {    }    public TestClassCtor(int a, String b) {        name = b;    }    private TestClassCtor(int a, double c) {    }}
Reflect obj = on("com.example.reflectiontest.TestClassCtor").create(1, 1.1);obj.set("name", "jianqiang");Object obj1 = obj.get("name");System.out.println(obj1.toString());----------------------jianqiang

No6:

修改类的私有静态字段

public class TestClassCtor {    private String name;    private static String address;    public TestClassCtor() {        name = "baobao";    }    public TestClassCtor(int a) {    }    public TestClassCtor(int a, String b) {        name = b;    }    private TestClassCtor(int a, double c) {    }}
on("com.example.reflectiontest.TestClassCtor").set("address","avccccc");Object obj2 = on("com.example.reflectiontest.TestClassCtor").get("address");System.out.println(obj2.toString());------------------avccccc

问题:为什么jOOR不支持final字段

因为jOOR的Reflect的set方法会在遇到final时,尝试反射出Field类的modifiers字段,在Java环境下是有这个字段的,但是Android版本的Field并没有这个字段,于是就报错NoSuchFeildException

转载地址:http://cqcmo.baihongyu.com/

你可能感兴趣的文章
JavaScript--------从理解这些图开始
查看>>
问题-
查看>>
抽取vs2010安装包中vc++ runtime
查看>>
浅谈Vue之双向绑定
查看>>
hibernate简单入门教程(五)---------检索策略
查看>>
jqgrid查找
查看>>
mysql中,查看当前数据库下所有的基表,不包括视图
查看>>
Android density、dpi、dp、px
查看>>
初识JAVA中的泛型概念
查看>>
Pitch,Yaw,Roll的概念
查看>>
Texture tiling and swizzling
查看>>
IOS 真机调试 报错 图片资源 不存在 原因
查看>>
部署NTP服务器进行时间同步
查看>>
Codeforces Round 97B 点分治
查看>>
Candy
查看>>
dN/dS与分子进化常用软件
查看>>
在 foreach 里使用引用要注意的陷阱(转)
查看>>
python3和paramiko安装
查看>>
HDU 2586 How far away ? 离线lca模板题
查看>>
CMarkup 解析XML
查看>>