非静态形式的优点是,您可以像下面的(抽象)基类中声明它,而不必担心会使用正确的类名:
protected Log log = new Log4JLogger(getClass());
但是,其缺点显然是将为该类的每个实例创建一个全新的记录器实例。这本身可能并不昂贵,但会增加大量开销。如果您想避免这种情况,请改用
static表格。但是它的缺点是,您必须在每个单独的类中声明它,并在每个类中都要注意在记录器的构造过程中使用了正确的类名,因为
getClass()不能在静态上下文中使用它。但是,在普通的IDE中,您可以为此创建一个自动完成模板。例如
logger+
ctrl+space。
另一方面,如果您通过工厂获得记录器,而该记录器又可能会缓存已经实例化的记录器,则使用非静态形式不会增加太多开销。例如Log4j为此具有一个
LogManager。
protected Log log = LogManager.getLogger(getClass());
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)