javacでヒープ汚染せずに代入文だけでクラッシュ

寝ようと思ったら思いついた。

public class Main {
    public static void main(String...args) {
        Comparable<?>[] c = method(1, 1L);
    }
    static <T> T[] method(T...ts) {
        return ts;
    }
}

これ、javacで警告でないけど実行するとClassCastException発生。言語仕様違反です。
おそらく、new T[ ]するときにreifiableな型の配列作ろうとしてイレイジャ変換かけている(erase(lub(Integer, Long)) = erase(Number & Comparable<...>) = Number としている)のに、戻り値にそれ伝播させてなくてT[ ]のまま使ってる。

明日まとめなおす予定。