反射獲取構造、創建實例
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();