Java でのリフレクション (java.lang.reflect):
リフレクションを通じて、次のことが可能になります。
リフレクションのデメリット:
コンパイル時の型チェックの損失:
重くて冗長なコード:
リフレクションには、より複雑で読みにくいコードが必要です。
例:
Method method = obj.getClass().getMethod("methodName"); method.invoke(obj, args);
パフォーマンス不足:
リフレクションのアプリケーション:
リフレクションの限定的使用:
推奨される手法: コンパイル時に未知のクラスをインスタンス化する場合にのみリフレクションを使用し、既知のインターフェイスまたはスーパークラスを通じてこれらのインスタンスを参照します。
例:
コマンドラインで指定された Set のインスタンスを作成するプログラム:
Class<? extends Set<String>> cl = (Class<? extends Set<String>>) Class.forName(args[0]); Constructor<? extends Set<String>> cons = cl.getDeclaredConstructor(); Set<String> s = cons.newInstance(); for (int i = 1; i < args.length; i++) { s.add(args[i]); } System.out.println(s);
例で示されている欠点:
実行時例外:
複雑さと冗長さ:
未確認のキャスト警告:
リフレクションの正当な使用:
結論:
反射は強力ですが、多くの欠点もあります。
可能な限り、オブジェクトをインスタンス化し、コンパイル時に既知のインターフェイスまたはスーパークラスを介してオブジェクトにアクセスする場合にのみリフレクションを使用してください。
本の例:
以上が項目 リフレクションよりもインターフェイスを優先するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。