使用什么而不是Class.newInstance()?

Dmi*_*ruk 30 java reflection

Class.newInstance()被标记为已弃用.文档没有提出任何替代方案.我们现在打算如何创建实例?

Mur*_*nik 46

引用Java 9的javadoc:

电话

clazz.newInstance()

可以替换为

clazz.getDeclaredConstructor().newInstance()

  • @YuriiKozachok `getDeclaredConstructor(Class<?>... paramTypes)` 是可变参数 - 因此您可以使用 0 个参数来调用它。 (3认同)
  • Java 8呢?我找不到没有参数的getDeclaredConstructor()方法。 (2认同)
  • @YuriiKozachok您可以使用`getConstrouctor`,但请注意它只会返回 **public** 构造函数。另外,请注意,“newInstance”在 Java 8 中并未被弃用(尽管使用它仍然存在使 JDK 开发人员在 9 中弃用它的所有问题......) (2认同)

And*_*ner 10

Class.getDeclaredConstructor(...).newInstance(...)
Run Code Online (Sandbox Code Playgroud)

有关原因的说明,请参阅Google errorprone的文档(例如).