Class.newInstance()は非推奨

こんにちは、さるまりんです。

Javaにはクラスを表すClassクラスがあります。なんのこっちゃですね。簡単に言えば型の情報を保持するクラスです。そのクラスにはどんな変数があり、どんなコンストラクタやメソッドがあるのかをクラスとして持っています。

Javaのリフレクションという機能を使ってこのClassクラスのオブジェクトからそのClassクラスが示すインスタンスを生成するということも可能です。それをするのがnewInstance()です。が、これを使おうとしてあることに気づきました。

Classクラスのオブジェクトの取得

クラス名のClassクラスのオブジェクトclazzは以下のように取得できます。

Class clazz = クラス名.class;

このclazzに対してメソッドを呼び出すことで操作することができます。

clazzオブジェクトからインスタンスを生成

clazz.newInstance()

このようにclazzオブジェクトのnewInstance()を呼び出すことでオブジェクトを生成できるのですが、これが本題です。

このnewInstance()の呼び出し、非推奨のようです。

eclipseでやってみると打ち消し線が入っていますね。

newInstance()は非推奨

こんな警告も出ています。

newInstance()が非推奨のワーニング

では、どうやってやるのが正解なのでしょうか。

こちらです。

clazz.getDeclaredConstructor(null).newInstance(null);

これで警告出ずに呼び出すことができます。

Classクラス直接ではなくてどのコンストラクタを呼ぶのかを指定すると警告は出ないようです。

上記でnullとなっているところはそれぞれClassクラスの配列を受け取ります。これでコンストラクタの引数を指定します。nullの場合は、引数なしのコンストラクタを呼び出しインスタンスを生成します。

以前は当たり前のように書いていたコードがいつの間にか警告が出るようになってました。昔のコードをたまに見直すって重要ですね。

読んでくださってありがとうございました。

それではまた!