Java在没有实例的动态类中调用静态方法

时间:2012-10-23 16:58:25

标签: java

我正在尝试向我的程序添加动态日志记录类(用于更改日志消息的位置,例如System.out或文件)。它扩展了具有静态方法Logger的基本抽象log(String)类。是否可以设置logger类,然后在不创建记录器实例或使用反射的情况下调用log方法?

这样的事情:

    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
        }
    }

1 个答案:

答案 0 :(得分:0)

这样的事情:

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

这将调用名为log的静态方法,String返回的类具有getLogger()参数。

<强>更新

但是根据您的描述,我相信使用接口并且单独的实现会更好。这样,您就可以处理实例和普通的多态调用。