左辺で分岐しよう
フィールド代入の際に、代入の対象となるフィールドを持っているオブジェクトは
条件式 (conditional expression) 等*1を使えば分岐できる。
これと、例外スローを式にするテクニック
実行時例外スローを式に
を使って左辺でnon-nullアサーションができるよ!
package test; public class LhsTest { private String field = "init"; private static boolean cond() { return true; } public static void main(final String[] args) { LhsTest o1 = new LhsTest(); LhsTest o2 = new LhsTest(); // 左辺で分岐 (cond() ? o1 : o2).field = "hogehoge"; System.out.println(o1.field); System.out.println(o2.field); o1 = null; // 左辺でnullチェック (o1 != null ? o1 : // 例外をスローする式 new Object() { public LhsTest err(final RuntimeException e) { throw e; } }.err(new NullPointerException("o1がnullでございますことよ")) // 代入 ).field = "fugafuga"; } }
実行結果
hogehoge init Exception in thread "main" java.lang.NullPointerException: o1がnullでございますことよ at test.LhsTest.main(LhsTest.java:28)
*1:メソッド呼び出しならばもっといろいろできますが、まあネタということで