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


    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();
  • 相关阅读:
    HDU-2067-小兔的棋盘
    HDU-1861-游船出租
    C语言笔记
    P1164 小A点菜
    P1028 数的计算
    P1217 [USACO1.5]回文质数 Prime Palindromes
    P1088 火星人
    P2392 kkksc03考前临时抱佛脚
    P3799 妖梦拼木棒
    First Step (ファーストステップ)
  • 原文地址:https://www.cnblogs.com/coderxiaobai/p/16115649.html
Copyright © 2020-2023  润新知