2

プログラムに動的ログ クラスを追加しようとしています (ログ メッセージの送信先を System.out やファイルに変更するため)。Logger静的メソッドを持つ基本抽象クラスを拡張しますlog(String)。ロガー クラスを設定してから、ロガーのインスタンスを作成したりリフレクションを使用したりせずにログ メソッドを呼び出すことは可能ですか?

このようなもの:

    public class MainController {
        private Class<? extends Logger> mLogger;

        // ...

        public void setLogger(Class<? extends Logger> logger) {
            mLogger = logger;
        }

        public Class<? extends Logger> getLogger() {
            return mLogger;
        }

        // ...
    }

    public class BrokenTest {
        // ...
        private void showErrorMessage(String message) {
            mMainController.getLogger().log(message); // Can't call .log on Class
        }
    }
4

1 に答える 1

0

このようなもの:

Method method = mMainController.getLogger().getMethod("log", String.class);
Object result = method.invoke(null, message);

これにより、 によって返されたクラスlogのパラメータで名前が付けられた静的メソッドが呼び出されます。StringgetLogger()

アップデート

しかし、あなたの説明から、インターフェースと個別の実装を使用する方が良いと思います。このようにして、インスタンスと通常のポリモーフィック コールを操作できます。

于 2012-10-23T17:01:27.977 に答える