【Java】newInstanceを使ってクラス(Class)からインスタンスを作成する!
クラス(Class)からインスタンスを作成するにはConstructorクラスのnewInstanceメソッドを使用します。
newInstanceメソッドはコンストラクタのクラスにアクセスする必要があります。
また、パラメータありのコンストラクタを使用してインスタンス生成するには、getConstructorメソッドを使用します。
今回はConstructorクラスのnewInstanceメソッドを使って、以下の場合でクラスからインスタンスを作成していきます。
⚫︎ デフォルトコンストラクタでインスタンスを作成する場合
⚫︎ パラメータ付きコンストラクタでインスタンスを作成する場合
目次
newInstanceメソッドとは
constructorクラスのnewInstanceメソッドとはクラスからインスタンスを作成することができるメソッドとなります。
newInstanceメソッドの書き方
newInstanceメソッドの構文は下記となります。
1 |
import java.lang.reflect.Constructor; |
まず、constructorクラスを使用できるようにインポートします。
1 |
コンストラクタ型 変数 = コンストラクタ名.newInstance; |
newInstanceメソッドの前にコンストラクタ名を指定することで指定したコンストラクタのインスタンスを作成することができます。
Classのインスタンスを作成するサンプルコード
Classのインスタンスを作成するサンプルコードを紹介します。
今回はデフォルトコンストラクタのインスタンスとパラメータ付きコンストラクタでインスタンスを作成します。
デフォルトコンストラクタでインスタンスを作成する場合
デフォルトコンストラクタでインスタンスを作成します。
例
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 |
// Classからインスタンスを作成する import java.lang.reflect.Constructor; public class Main { // フィールド private String str1; // デフォルトコンストラクタ public Main() { this.str1 = "初期値"; } public static void main(String[] args) throws Exception { // クラス情報の作成 Class<Main> cls = Main.class; // デフォルトコンストラクタのConstructorを作成 Constructor<Main> constructor = cls.getConstructor(); // デフォルトコンストラクタのConstructorでインスタンスを作成 Main obj = constructor.newInstance; System.out.println( "デフォルトコンストラクタで作成したインスタンス: " + obj.str1); } } |
出力結果
デフォルトコンストラクタで作成したインスタンス: 初期値
デフォルトコンストラクタでインスタンスを作成できました。
パラメータ付きコンストラクタでインスタンスを作成する場合
パラメータ付きコンストラクタでインスタンスを作成します。
例
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
// Classからインスタンスを作成する import java.lang.reflect.Constructor; public class Main { // フィールド private String str2; // デフォルトコンストラクタ public Main() { this.str2 = "初期値"; } // パラメータ付きコンストラクタ public Main(String newStr) { this.str2 = newStr; } public static void main(String[] args) throws Exception { // クラス情報の作成 Class<Main> cls = Main.class; // デフォルトコンストラクタのConstructorを作成 Constructor<Main> constructor = cls.getConstructor(); // デフォルトコンストラクタのConstructorでインスタンスを作成 Main obj = constructor.newInstance; // パラメータ付きコンストラクク constructor = cls.getConstructor(String.class); // パラメータ付きコンストラクタのConstructorでインスタンスを作成 obj = constructor.newInstance("パラメータ"); System.out.println( "パラメータ付きコンストラクタで作成したインスタンス: " + obj.str2); } } |
出力結果
パラメータ付きコンストラクタで作成したインスタンス: パラメータ
getConstructorメソッドは、パラメータの型を指定すると、そのクラスの「Constructor」インスタンスを返すメソッドです。
パラメータが不要なコンストラクタ(デフォルトコンストラクタ)の 場合は、パラメータを設定しません。
メソッドを呼び出した「Class」インスタンスに そのコンストラクタがなかった場合(または、publicコンストラクタでなかった場合)は、「NoSuch MethodException」例外が発生します。
今回のポイント
constructorクラス使用してインスタンスを作成
Classからインスタンスを作成するには「Constructor」クラスを使用する
⚫︎ constructorクラスのnewInstanceメソッドを使うと、その「Constructor」表すクラスのインスタンスが作成される(newInstanceメソッドのパラメータが、そのままコンストラクタのパラメータになる)
⚫︎ newInstanceメソッドでインスタンス化する前にgetConstructorメソッドを使用することでパラメータ付きコンストラクタでインスタンスを作成することができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。