Java8 - Memo
Supplier<T>
通常使用log4j會有以下程式碼去避免昂貴的debug操作:
if( logger.isDebugEnable() ){ logger.debug("{}", expensiveMethod()); }isDebugEnable()應該封裝於debug中,lazy loading可解決我們的問題:
logger.debug(() -> expensiveMethod());
public void debug(Supplier<String> aSupplier){ if( debug ){ log(aSupplier.get()); } }
- log4j 2.4開始支援Lambda。
Optional
透過Optional的採用預設值方式,可以避免null與減少null判斷:
Optional<String> item = Optional.empty(); if( xxxx ){ try { item = Optional.ofNullable(evaluateItem()); } catch( Exception e ) { // handle exception } } return item.orElse("");