使用显式构造器查找和调用替代已弃用的 Class.newInstance()。
代码对比
✕ Deprecated Class.newInstance()
Plugin plugin = pluginClass.newInstance();
✓ Constructor reflection
Plugin plugin = pluginClass
.getDeclaredConstructor()
.newInstance();
发现此代码有问题? 告诉我们。
为什么现代方式更好
受支持的 API
不再使用已弃用的 Class.newInstance()。
显式构造器
请求的签名清晰可见,并且可以接受参数。
如实报告失败
构造器异常通过 InvocationTargetException 表示。
旧方式
Class.newInstance()
现代方式
显式查找构造器
自 JDK
9
难度
中级
JDK 支持
从 Class.newInstance() 迁移到构造器反射
可用
自 JDK 9(2017 年 9 月)弃用 Class.newInstance() 起推荐使用。
工作原理
Class.newInstance() 已被弃用,因为它可能绕过编译期对构造器所抛异常的检查,并且只支持无参构造器。显式查找 Constructor 可清楚展示所选签名,并通过适当的反射异常报告反射调用失败。模块和访问规则仍然适用;此模式不建议绕过封装。
相关文档
证明