intersection typeと型変数のupper bound

言語仕様にintersection typeは型変数のupper boundと似ているが、違うと書いてあるのでメモ。
型変数のupper boundはintersection typeをもたらすが、intersection typeの方がより広いものを含むということらしい。

An intersection type takes the form T1 & ... & Tn (n > 0), where Ti (1 ≤ i ≤ n) are type expressions.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.9

intersection typeはTi (i = 1, ... , n) を型として T1 & ... & Tnという形をとります。

Intersection types arise in the processes of capture conversion (§5.1.10) and type inference (§15.12.2.7). It is not possible to write an intersection type directly as part of a program; no syntax supports this.

intersection typeは捕捉変換 (capture conversion) および型推論 (type inference) の処理中に現れます。intersection typeを直にプログラムの一部分として書くことはできません―それを許すシンタックスはありません。

It is worth dwelling upon the distinction between intersection types and the bounds of type variables. Every type variable bound induces an intersection type.

intersection typeと型変数の境界の区別については深入りする価値があります。型変数の境界はすべてintersection typeをもたらします。