Generics 勉強中
タイトル通り Generics 勉強中です。
Integer.MAX_VALUE で Integer の最大値をとってくるみたいに、
// このソースはコンパイル通らないので参考にしないでね。 class Values <T> { private T max, min; public Values() { this.max = T.MAX_VALUE; this.min = T.MIN_VALUE; } public T getMax() { return this.max; } public T getMin() { return this.min; } } class ValuesTester() { public static void main(String[] args) { Values <Byte> obj = new Values<Byte>(); System.out.println("Byte : " + obj.getMin + "〜" + obj.getMax); Values <Integer> obj2 = new Values<Integer>(); System.out.println("Integer : " + obj2.getMin + "〜" + obj2.getMax); } }
みたいなコード書きたいんだけど、これはコンパイル通りませんでした。
こんな感じに実現する方法ないのかな?
22時30分追記
twitter で @nagise さんからリプライいただきました!
なぎせゆうき @nagise |
@shiget84 無理だねぇ。Tは型じゃなくて型変数なのでstaticなメソッドやフィールド呼び出しはできないよ。(2009-08-21 22:19:43) | link | |
なぎせゆうき @nagise |
@shiget84 型変数Tを使える場所ってのは限られていて、変数や引数、フィールドの型宣言ぐらいだね。new T()とかもできない。(2009-08-21 22:22:00) | link | |
なぎせゆうき @nagise |
だからジェネリックなクラスを作った場合、T型のオブジェクトってのはどこか外から受け取らないといけない。キセルのように、入口から出口までの間のぶぶんをTという形で抽象的に扱うわけだね。(2009-08-21 22:24:10) | link |
ということで、やっぱり無理なんですね。勉強になりました!
なぎせさん、ありがとうございました!
参考
型変数の制約
http://wisdom.sakura.ne.jp/programming/java/java5_2.html