ジェネリクスの手習い
来るべきJava5時代(っていつだよ?)に備え,Genericsと戯れる。
ジェネリクス・クラスは割とすぐ理解できたので,止めときゃいいのにジェネリクス・メソッドに手を出してみた。
試しに組んでみたコードはこんなの。
public class Test { public static <T> List<T> createList(Class<T> clazz) throws Exception { T o = clazz.newInstance(); List<T> list = new ArrayList<T>(); list.add(o); return list; } }
やってみたかったことは,「引数で指定された型を持つListを返してもらう」こと。メソッドの中身は便宜上なので,あまりツッコまないこと。:-D
使い方は,こんな感じになる。
List<String> list = Test.createList(String.class);
型変数をクラスにではなく,意図的にメソッドで宣言してみたんだけど,この場合,型変数:Tのスコープはこのメソッド限定になるんだろうなぁ,と。
たとえばだ。ジェネリクス・クラス使って,こんなコード書いたとする。
#細かいところは気にするな。
public class Test<T> { private List<T> list; public Test(List<T> _list) { list = _list; } public T first() { return list.get(0); } }
使い方はこうだよね。
List<String> list = new ArrayList<String>(); list.add("あいうえお"); Test<String> test = new Test<String>(list); String str = test.first();
これをこうしたいんだけど,そんなのムリな相談なんじゃないかと,気づきつつある。:-D
List<String> list = new ArrayList<String>(); list.add("あいうえお"); // Testもジェネリクスにするのがイヤだ。 Test test = new Test(list); String str = test.first();
うーん,ジェネリクスをモノにするには,かな〜り素振りをしとかないとイカンのう。:-(