我认为可以接受的是,作为Java中的一般规则(也许是任何具有异常处理的语言),应该尽量避免使用异常处理来实际处理业务逻辑.一般来说,如果预计会发生某种情况,那么应该检查它并直接处理它,而不是依赖于异常处理来为您进行检查.例如,以下不被视为良好做法:
try{
_map.put(myKey, myValue);
} catch(NullPointerException e){
_map = new HashMap<String, String>();
}
Run Code Online (Sandbox Code Playgroud)
相反,懒惰初始化应该更像这样:
if(_map == null){
_map = new HashMap<String, String>();
}
_map.put(myKey, myValue);
Run Code Online (Sandbox Code Playgroud)
当然,可能存在比简单处理延迟初始化更复杂的逻辑.因此,鉴于此类事情通常不受欢迎......如果有的话,依靠发生某种业务逻辑的异常是一个好主意吗?是否准确地说任何一个人感到被迫使用这种方法的实例是否真的突出了所使用的API的弱点?