反射获取构造、创建实例
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();