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
    评论
commons-lang是一个开源的Java库,提供了许多常用的工具类和方法,能够帮助开发者简化Java编程过程中的一些常见任务。 commons-lang 3-12.0是commons-lang库的一个特定版本。这个版本是commons-lang 3系列的第12个发布版本,也是该系列的最新版本。它包含了在之前版本的基础上进行的一些改进和修复。 commons-lang 3-12.0版本主要提供了以下一些功能和特性: 1. 字符串操作:commons-lang提供了很多关于字符串操作的工具类和方法,如字符串连接、截取、格式化、编码解码等,使得处理字符串变得更加简单和高效。 2. 数据型转换:commons-lang提供了各种数据型之间的转换工具类,例如将字符串转换为整数、日期转换为字符串等,方便开发者进行各种型的数据转换。 3. 数组操作:commons-lang提供了一些有关数组操作的工具方法,如数组的复制、填充、排序、查找等,使得开发者可以更方便地操作数组数据。 4. 异常处理:commons-lang提供了一些异常处理的工具类和方法,例如异常转换、异常堆栈信息处理等,能够帮助开发者更好地处理和记录异常信息。 同时,commons-lang还提供了其他一些实用的工具类和方法,如日期处理、随机数生成、文件操作、反射等等,能够帮助开发者提高开发效率和代码质量。 总的来说,commons-lang 3-12.0是一个非常实用的Java库,它的存在不仅简化了Java编程中一些常见任务的处理,也提高了代码的可读性和可维护性。无论是在日常的开发工作中,还是在开发一些大型项目中,都可以考虑使用commons-lang来提升开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值