1. ホーム
  2. java

[解決済み] なぜClass.newInstance()は "悪 "なのか?

2023-01-28 20:51:19

疑問点

ライアン・デルッキ 依頼 ここで へのコメント #3 で トム・ホーティン の回答です。

なぜClass.newInstance() は "悪" なのでしょうか?

これは、コードサンプルに対するものです。

// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();

では、なぜEvilなのか?

どのように解決するのですか?

Java API のドキュメントに、その理由が書かれています ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance() ):

このメソッドは、チェックされた例外を含め、nullaryコンストラクタによって投げられたすべての例外を伝播することに注意してください。このメソッドを使用すると、コンパイラによって実行されるコンパイル時の例外チェックを効果的に回避することができます。このメソッドは Constructor.newInstance メソッドは、コンストラクタによってスローされる例外を (チェックされた) InvocationTargetException .

言い換えれば、チェックされた例外システムを破ることができるのです。