こんにちは、さるまりんです。
Javaにはクラスを表すClass
クラスがあります。なんのこっちゃですね。簡単に言えば型の情報を保持するクラスです。そのクラスにはどんな変数があり、どんなコンストラクタやメソッドがあるのかをクラスとして持っています。
Javaのリフレクションという機能を使ってこのClass
クラスのオブジェクトからそのClass
クラスが示すインスタンスを生成するということも可能です。それをするのがnewInstance()
です。が、これを使おうとしてあることに気づきました。
Classクラスのオブジェクトの取得
クラス名のClass
クラスのオブジェクトclazz
は以下のように取得できます。
Class clazz = クラス名.class;
このclazzに対してメソッドを呼び出すことで操作することができます。
clazzオブジェクトからインスタンスを生成
clazz.newInstance()
このようにclazz
オブジェクトのnewInstance()
を呼び出すことでオブジェクトを生成できるのですが、これが本題です。
このnewInstance()
の呼び出し、非推奨のようです。
eclipseでやってみると打ち消し線が入っていますね。
こんな警告も出ています。
では、どうやってやるのが正解なのでしょうか。
こちらです。
clazz.getDeclaredConstructor(null).newInstance(null);
これで警告出ずに呼び出すことができます。
Class
クラス直接ではなくてどのコンストラクタを呼ぶのかを指定すると警告は出ないようです。
上記でnull
となっているところはそれぞれClass
クラスの配列を受け取ります。これでコンストラクタの引数を指定します。null
の場合は、引数なしのコンストラクタを呼び出しインスタンスを生成します。
以前は当たり前のように書いていたコードがいつの間にか警告が出るようになってました。昔のコードをたまに見直すって重要ですね。
読んでくださってありがとうございました。
それではまた!