我看到有人编写了一个java LOG API,就像代码unerneath一样.这个想法是客户端不必每次都调用LogUtil.getInstance().但我的感受是这不是惯用的java吗?
public class LogUtil{
private static LogUtil instance;
private Object current;//some Logger
private static LogUtil getInstance(){
if(instance == null){
instance = new LogUtil();
}
return instance;
}
private static void debug(String text){
}
public static LogUtil init(){
//dosomething with
// getInstance().current;
return getInstance();
}
public static LogUtil logSomething(String text){
//dosomething with
// getInstance().current;
return getInstance();
}
public static LogUtil anotherMethod(String text){
//dosomething with
// getInstance().current;
return getInstance();
}
Run Code Online (Sandbox Code Playgroud)
}
反对这种设计的理由是什么(使每个方法都是静态的)?
这基本上是"全局变量"的变体,问题总是一样的:你只能有一个.如果你需要更换或扩展它,很多代码都会破坏.
其他日志框架使用工厂的原因:
private final static Logger log = LoggerFactory.getLogger( Foo.class );
Run Code Online (Sandbox Code Playgroud)
这样,我有一个全局变量(在你的情况下,而不是几十个).这不是理想的,但至少给我一点失败.
这种方法允许我Logger用几乎任何东西扩展/替换接口,而不必更改代码中的数百个位置.
那说:不要编写自己的日志API.使用slf4j.你需要花费更长的时间来理解它是如何工作的,但许多聪明的人花了数年时间来构建一个伟大的日志框架,解决了你不了解的数千个问题.
编辑
它不是一般的登录工具.但更多的是生成Business Word文档的"Reporter类".
然后看看静态导入.
我建议公开一个getInstance()方法,但给这个方法一个更有用的名称.然后,您可以在其他地方静态导入此单个方法,并在没有LogUtil.前缀的情况下调用它.
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |