java commons库之一:lang(4)反射

前言
上一节介绍了日期文本方面的操作
这节来介绍下lang的反射机制相关的支持
反射相关的接口都在reflect包下

TypeUtils

类型相关util,用于对所有对象类型基本类型功能的封装

MethodUtils

对象方法相关utils
invokeMethod:通过方面名称调用一个对象的方法,参数非常灵活

class TestObject{
    public void m(){
    }
    public void m2(int a){}
    public int m3(int a){return a;}
}
TestObject object = new TestObject();
MethodUtils.invokeMethod(object,"m");
MethodUtils.invokeMethod(object,"m2",1);
MethodUtils.invokeMethod(object,"m3",1);//带返回值的

invokeStaticMethod:调用静态方法,上面的那个只能支持非静态方法,这个是专门支持镜头的,第一个参数由Object变为了Class

FieldUtils:对象成员操作util,可以支持访问对象成员,比如其中的getAllFields,可以直接获取到全部的对象成员
class TestObject{
    private int a;
    private String b;
    public String c;
}
Field[] fields = FieldUtils.getAllFields(TestObject.class);//获取成员列表,里面包含了成员的名字

注意这个方式得到仅仅是成员的定义,并不包括实际内容
实际内容的获取可以使用其中的readField和writerFiled进行操作,具体用法去看FieldUtils的doc吧,但是注意一点,readField和writerFiled本身并不适合pojo的操作
因为它们都是直接读取的成员内容,没有通过bean标准的set、get方式进行操作,这块操作commons里面也提供了,不过是在commons beanutils中

ConstructorUtils

构造util,如果我们仅仅知道类的名称改如何把一个对象new出来?
ConstructorUtils封装了通过反射方式直接创建对象的方法,可以兼容各种操作的构造函数.

class TestObject{
    private String value;

    public TestObject(String value){
        this.setValue(value);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
TestObject t = ConstructorUtils.invokeConstructor(TestObject.class, "test ConstructorUtils");
System.out.println(t.getValue());

实际中往往还需要ClassUtils工具的支持,这块可以帮助通过各种方式获取Class
有兴趣的可以用这些工具实现下spring的ioc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值