繁体   English   中英

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

[英]Java Invoke Static Method in Dynamic Class Without Instance

我正在尝试向程序中添加动态日志记录类(用于更改日志消息的位置,例如System.out或文件)。 它扩展了具有静态方法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
        }
    }

像这样:

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

这将在getLogger()返回的类上使用String参数调用名为log的静态方法。

更新

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM