[英]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.