commons-lang3的反射工具类之ConstructorUtils

    大家都知道java中创建一个对象,用new这个关键字,比如,new ArrayList(),new String()等等,java8以后还可以使用实现Supplier函数接口,对象::new来创建对象,还可以使用java反射机制,最近lombok的出现,调用Builder.build()方法来创建对象,创建对象的方式也越来越新颖,今天我们在来介绍一种创建对象的方法,就是使用common-lang3包下的ConstructorUtils类。

 

ConstructorUtils

    该类是调用对象的构造方法,生成实例的工具类,和java反射机制创建对象大同小异,比java反射机制的代码更加简洁,我们就比较下这两种方法。

 

两者创建对象的比较

    两者都是调用对象的无惨或有参构造方法来创建对象。

代码示例

package ConstructorUtilsTest;

import org.apache.commons.lang3.reflect.ConstructorUtils;

public class ConstructorUtilsTest {

    public static void main(String[] args) throws Exception {

        // java反射机制创建的对象
        System.err.println(String.class.getConstructor(String.class).newInstance("iosoft2020"));

        // ConstructorUtils类创建的对象
        System.err.println(ConstructorUtils.invokeConstructor(String.class, "iosoft2020"));

    }

}
 

执行结果

iosoft2020
iosoft2020

 

注意点

    ConstructorUtils#invokeConstructor方法,只能调用public的构造函数,否则会抛出异常

代码示例

package ConstructorUtilsTest;

import org.apache.commons.lang3.reflect.ConstructorUtils;

public class ConstructorUtilsExceptionTest {

    public static void main(String[] args) throws Exception {

        System.err.println(ConstructorUtils.invokeConstructor(Test.class));

    }

}

class Test {
    private Test() {
    }
}

执行结果

Exception in thread "main" java.lang.NoSuchMethodException: No such accessible constructor on object: ConstructorUtilsTest.Test
    at org.apache.commons.lang3.reflect.ConstructorUtils.invokeConstructor(ConstructorUtils.java:116)
    at org.apache.commons.lang3.reflect.ConstructorUtils.invokeConstructor(ConstructorUtils.java:85)
    at ConstructorUtilsTest.ConstructorUtilsExceptionTest.main(ConstructorUtilsExceptionTest.java:9)

 

    我们在写框架或者共通方法时会用到这些方法,下篇我们会讲解下MethodUtils。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值