1.Java 9を入れた。
2.リフレクションするコードをコピペしてみた。
3.警告が出た。(増えた)
はぁ!? ってことで、少し気になったので、調べてみました。
結果から書くと、Class#newInstance()は非推奨になった・・ってオチなのですが。
おいおい、結構みんな困ると思うんだけど・・・
知らなかったのは俺だけなんだろうか(;´Д`)
何かと使っていたので、嫌な感じです。要注意なのでメモ。
あくまで警告なので、すぐ実害があるわけではないのですが、いつかは・・!?
Java SE 9の非推奨なサンプルと今後の書き方(だった)サンプル
- Class#newInstance()を使った非推奨なNewInstanceTest#getInstance1()
- Constructor#newInstance()を使った今後の書き方になるだろうNewInstanceTest#getInstance2()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import java.lang.reflect.InvocationTargetException; public class NewInstanceTest { /** * 非推奨なClass#newInstance()でインスタンスを取得 * @param clazz インスタンスを取得したいクラス名 * @return Object インスタンス */ @Deprecated public Object getInstance1(String clazz) { try { //@Deprecated(since="9") //public T newInstance() throws InstantiationException, IllegalAccessException //出典:Java SE 9 javadocより return Class.forName(clazz).newInstance(); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } /** * Java9以降は、こんな感じでインスタンスを取得 * @param clazz インスタンスを取得したいクラス名 * @return Object インスタンス */ public Object getInstance2(String clazz) { try { return Class.forName(clazz).getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) { e.printStackTrace(); } return null; } } |