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);

这将调用一个以返回的类logString参数命名的静态方法getLogger()

更新

但是根据您的描述,我相信使用接口和单独的实现会更好。这样,您可以使用实例和正常的多态调用。

于 2012-10-23T17:01:27.977 回答