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[ ]のまま使ってる。
明日まとめなおす予定。