| The documentation for [`Class#newInstance`][javadoc] includes the following |
| warning: |
| |
| [javadoc]: https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#newInstance |
| |
| > Note that this method propagates any exception thrown by the nullary |
| > constructor, including a checked exception. Use of this method effectively |
| > bypasses the compile-time exception checking that would otherwise be performed |
| > by the compiler. The `Constructor.newInstance` method avoids this problem by |
| > wrapping any exception thrown by the constructor in a (checked) |
| > `InvocationTargetException`. |
| |
| Always prefer `myClass.getConstructor().newInstance()` to calling |
| `myClass.newInstance()` directly. The `Class#newInstance` method is slated for |
| [deprecation in JDK 9](https://bugs.openjdk.java.net/browse/JDK-6850612). |
| |
| Note that migrating to `Class#getConstructor()` and `Constructor#newInstance` |
| requires handling three new exceptions: [`IllegalArgumentException`][iae], |
| [`NoSuchMethodException`][nsme], and [`InvocationTargetException`][ite]. |
| |
| [iae]: https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html |
| [ite]: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/InvocationTargetException.html |
| [nsme]: https://docs.oracle.com/javase/8/docs/api/java/lang/NoSuchMethodException.html |