左辺で分岐しよう

フィールド代入の際に、代入の対象となるフィールドを持っているオブジェクトは
条件式 (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:メソッド呼び出しならばもっといろいろできますが、まあネタということで