我正在尝试向我的程序添加动态日志记录类(用于更改日志消息的位置,例如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
}
}
答案 0 :(得分:0)
这样的事情:
Method method = mMainController.getLogger().getMethod("log", String.class);
Object result = method.invoke(null, message);
这将调用名为log
的静态方法,String
返回的类具有getLogger()
参数。
<强>更新强>
但是根据您的描述,我相信使用接口并且单独的实现会更好。这样,您就可以处理实例和普通的多态调用。