• 反射获取构造、创建实例


    1.class对象调用newInstance方法进行实例化

    Class<SunModbusProtocolSupportProvider> clazz = SunModbusProtocolSupportProvider.class;
    SunModbusProtocolSupportProvider sunModbusProtocolSupportProvider = clazz.newInstance();

    该方式是利用无参构造创建实例,如果无参构造修饰为私有,会报如下异常:

     也就是说不能访问私有的无参构造

    2.class对象调用getConstructor方法获取构造

    Constructor<SunModbusProtocolSupportProvider> constructor = clazz.getConstructor();

    该方式获取的是公有构造,参数为可变参数,所以根据传的参数决定调用哪个构造,如上所示,调用的是公有的无参构造,如果无参构造被修饰为私有,会报如下异常:

     也就说找不到公有的无参构造

    3.class对象调用getDeclaredConstructor方法获取构造

    Constructor<SunModbusProtocolSupportProvider> declaredConstructor = clazz.getDeclaredConstructor();

    该方式获取的是所有的构造方法,即私有修饰的也可以获取到,参数为可变参数,所以根据传的参数决定调用哪个构造

    4.通过getDeclaredConstructor方法获取到的构造调用newInstance创建实例

    Constructor<SunModbusProtocolSupportProvider> constructor = clazz.getDeclaredConstructor();
    constructor.newInstance();

    如果无参构造用私有修饰,会报如下异常:

     5.利用暴力反射设置为可访问即可

    Constructor<SunModbusProtocolSupportProvider> constructor = clazz.getDeclaredConstructor();
    constructor.setAccessible(true);
    constructor.newInstance();
  • 相关阅读:
    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
    SVN使用教程总结
    实践SQLServer Tuning
    SQL性能优化:如何定位网络性能问题
    windows7下修改hosts文件无效解决办法
    jQuery Event.stopPropagation() 函数详解
    引用js或css后加?v= 版本号的用法
    JS实现点击跳转登陆邮箱
    DWZ (JUI) 教程 navTab 刷新分析
    CPU与内存的关系
  • 原文地址:https://www.cnblogs.com/coderxiaobai/p/16115649.html
Copyright © 2020-2023  润新知