[解決済み] Javaでクラスの名前を指定してインスタンス化する方法はありますか?
2022-08-27 11:53:18
質問
私は質問として探していた。 その文字列名からクラスをインスタンス化する これは、その名前を持っているときにクラスをインスタンス化する方法を記述しています。Javaでそれを行う方法はありますか?私はパッケージ名とクラス名を持っており、私はその特定の名前を持つオブジェクトを作成できるようにする必要があります。
どのように解決するのですか?
2つの方法があります。
方法1 - 引数なしのコンストラクタを持つクラスのみ。
クラスが引数なしのコンストラクタを持つ場合、引数なしのコンストラクタを持つクラスに対して、引数なしのコンストラクタを持つクラスに対して、引数なしのコンストラクタを持つクラスに対する
Class
オブジェクトを使用します。
Class.forName()
を使用し
newInstance()
メソッドを使用してインスタンスを作成します(ただし、このメソッドはしばしば
は悪とみなされます。
というのは、Javaのチェックされた例外を打ち負かすことができるからです)。
例えば
Class<?> clazz = Class.forName("java.util.Date");
Object date = clazz.newInstance();
方法2
クラスが引数のないコンストラクタを持たない場合にも有効な、より安全な別の方法は、クラスオブジェクトに問い合わせ、その
Constructor
オブジェクトを取得し
newInstance()
メソッドを呼び出します。
Class<?> clazz = Class.forName("com.foo.MyClass");
Constructor<?> constructor = clazz.getConstructor(String.class, Integer.class);
Object instance = constructor.newInstance("stringparam", 42);
どちらの方法も リフレクション . 通常、以下のような発生しうる様々な例外をキャッチする必要があります。
- JVMがあなたのクラスを見つけられないか、ロードできない。
- インスタンス化しようとしているクラスが、正しい種類のコンストラクタを持っていない。
- コンストラクタ自体が例外を発生させた
- 呼び出そうとしているコンストラクタは public ではありません。
- セキュリティマネージャがインストールされており、リフレクションの発生を妨げています。
関連
-
型に解決できない エラー解決
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] print()を使用してクラスのインスタンスを表示するには?
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
javaの非静的メソッドを静的に参照することができない
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Javaジェネリックを1つの記事で
-
-bash: java: コマンドが見つからない 解決方法
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
テストが空であるかどうかを判断するためのオプションの処理
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題