如何避免对对象进行繁琐的空检查

Cra*_*uin 2 java null encapsulation

如果我有一个类,我想接受一个可选的记录器来记录调试信息:

public class A {

private Logger logger ; 

public A( Logger logger ) { 
    this.logger = logger ; 
}

public A() { 
    this( null ) ;
}

public void hello() {
    logger.debug( "hello" ) ;
}

public void goodbye() {
    logger.warn( "goodbye" ) ; 
}

}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我避免需要进行常量空值检查?

public void hello() {

    if( logger != null ) { 
        logger.debug( "hello" ) ;
    }

}

public void goodbye() {

    if( logger != null ) {
        logger.warn( "goodbye" ) ; 
    }

}
Run Code Online (Sandbox Code Playgroud)

我想也许如果我做了一个记录器包装类,可以为我做检查,然后不做任何事,或记录消息.但是我需要包装我想要使用的每个方法.

Ami*_*hum 9

我将创建Logger一个接口并实现真正的记录器和一个不记录任何东西的虚拟类.这样,您始终只需访问记录器而无需进行任何空检查.