foreach Nullチェック
前に仕事でコーディング中に失敗したこと。
nullのコレクション変数に対してforeach文をあてがうと、Nullちんぽこ例外が起こる。
事前にNullチェックをしたいが、
if ( collection != null ) foreach... なんてださい。
public class Main { static <T> Iterable<T> nullGuard(Iterable<T> iter) { return iter == null ? Collections.<T>emptyList() : iter; } public static void main(String[] args) { Double[] da = new Double[]{0.1, 0.2, 0.3}; List<Double> ld = new ArrayList<Double>(); ld.add(1.0); ld.add(2.0); for ( double d : nullGuard(ld)){ System.out.println(d); } for ( double d : nullGuard(Arrays.asList(da))){ System.out.println(d); } } }
1.0 2.0 0.1 0.2 0.3
スマートにできるような、しかし微妙にきもい。さらにプリミティブな配列には対応できない。
template specialization使えば、と思ったけどJavaにはないみたい。
Java難しい。。。