反射获取构造、创建实例

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();
全部评论
有示例,看的就很明白了,感谢分享
点赞 回复 分享
发布于 2022-04-11 14:29

相关推荐

合不合适,我自己说了才算
码农索隆:hr:“真执着啊,来我公司当法人吧”
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务