为了轻松地为我的多个项目类启用日志记录,我决定滥用 newdefault
关键字为我的类创建一个简单的方法特征:
default void Log(Level lvl, String msg) {
Logger log = Logger.getLogger(this.getClass().getName());
//Log something
}
我真正不喜欢的是log
每次都需要得到。如果我使用 C++,我会声明:
static Logger log = ...;
每隔一次调用该函数,记录器就已经在变量中初始化。在普通类中,我使用这种模式来模拟静态变量:
class A {
//By default, this is null until needed
private Obj cached_obj = null;
public void doSomethingWithObj(Something thing) {
//Once needed, it only initialises once
if(cached_obj==null)
cached_obj = Obj.generateObj();
cached_obj.doSomething(thing);
}
}
但这对于接口是不可能的。接口不能有任何属性。
那么是否有其他解决方法,还是 Java 会再次阻碍我的表现?