タグ

ブックマーク / ashigeru.hatenadiary.org (2)

  • コンストラクタ周りの覚え書き - しげるメモ

    じぶんめも。 列挙型のコンストラクタ privateのみ 明示的親コンストラクタ起動(super();)を書けない チェック例外をスローできない*1 throws RuntimeException と書く分にはOKなので、構文自体はクラスのコンストラクタと同様 デフォルトコンストラクタ クラス(列挙型でない)がコンストラクタ宣言を保持していない場合、デフォルトコンストラクタが自動的に提供される パラメータを受け取らない チェック例外をスローできない 親クラスの引数をとらないコンストラクタを起動するだけ デフォルトコンストラクタの可視性(public, protected, ...)はクラスの可視性と一致する 列挙型がコンストラクタ宣言を保持していない場合、デフォルトコンストラクタが自動的に提供される パラメータを受け取らない java.lang.Enumの引数をとらないコンストラクタを起動

    コンストラクタ周りの覚え書き - しげるメモ
  • 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[ ]のまま使ってる。 明日まとめなおす予定。

    javacでヒープ汚染せずに代入文だけでクラッシュ - しげるメモ
  • 1