反射獲取構造、創建實例

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();