least upper bound

  • class Integer extends Number implements Comparable
  • class Long extends Number implements Comparable

これら2つのクラスの最小上限境界計算がうまくいかない。

何に使うかというと、

static <T> T t(T...t) {
    return null;
}

というメソッドがあったときに

t(Integer.valueOf(1), Long.valueOf(2))

というメソッド起動の戻り値型を計算する時とか。

手計算すると [Number & Comparable< ? >] という共通型になるのが正解なんだろうけど、このComparable< ? >を出すのが厄介で、無限型が出現してしまうことに。

んー、無限型用のコンテキストを作るかどうするか…


一時的に無限の匂いを感じたら?で置換することにした。ListとListがList< ? extends CharSequence>になってほしいのにList< ?>になってしまうところがしょぼい。8月に入ったらちゃんと実装するかな。