コンテキストを利用する式
メモ。
コンテキストによって動作が変わるもののうち、忘れそうなもの。
(こういうのってレフトコンテキストとか呼ぶんでしたっけ)
代入コンテキスト
メソッドの型推論規則が多少変化する(場合がある)。
詳しくは代入変換とメソッド起動変換 - しげるメモに。
配列初期化コンテキスト
配列初期化子を式とみなした際の評価結果が変わる。ついでに、配列初期化コンテキストは代入コンテキストでもあるため、正確に解析してないとまずい。
int[][][] a = {t(), { t() }, {{ t() }}}; long[][][] b = {t(), { t() }, {{ t() }}}; <T> T t() {}
括弧付きの式の取扱い
括弧の使用は、非常に興味深い例外を一つ除き、評価の順序に対してのみ影響を与える。
15.8.5 Parenthesized Expressions
とのことで、コンテキストを引き継ぐ模様。つまり、
ParenthesizedExpression: ( Expression )
のExpressionにおいて、代入コンテキスト、および配列初期化コンテキストはParenthesizedExpressionのそれらに一致する。