List<型名>って何!?
さて、データベースへの書き込み方は分かったので、後はデータベースへの問い合わせを覚えればデータベースの勉強とはオサラバだ。何しろネットゲームではデータベース中の表はあらかじめ決められたものしか存在せず、増えも減りもしないからな。(特定のギルドメンバーの一覧すらも全部ぶっこんだ表からギルド名で検索かければいいし。)というわけで、こないだからの続きで
http://journal.mycom.co.jp/special/2006/jpa/007.html
で、勉強する。マイコミジャーナル様々だな!使える情報ありがとう!
・・・
// テーブルの初期化 DefaultTableModel model = (DefaultTableModel)employeeTable.getModel(); Query query = manager.createQuery ("select e from Employee e order by e.id"); List<Employee> results = (List<Employee>)query.getResultList(); for(Employee e : results) { Vector<Object> data = new Vector<Object>(); data.add(e.getId()); 【以下省略】
・・・え?何それ?List<Employee>ってなんじゃそりゃぁぁぁぁ!?(Employeeはユーザー定義のクラス。データベース中の表「Employee」に対応する。Idなどのデータベースの列名に対応するインスタンス変数をもつ。)
手持ちの初心者解説書をひっくり返しても影も形も見当たらない。うーん、じゃあ、中級者用法なのかなぁ・・・。
そこでまずJavaAPIを見てみる。まーどうせ書いてないだろうけど。
↓
無し!・・・何というお約束!・・・|||orz
ちゃんとListクラスとListインターフェースの両方を見たんだけどね。
↓
Java言語規定も見たが分からんかった。どこかにあるのかも知れんが、どこにあるのかがまず分からん!
↓
こうなったらググるしかないか・・・。しかしこれ→<型名>、とてもググりにくい表記なんですけど・・・。
↓
「Java < >」でググっても案の定出てこない。(先頭40件を検索結果画面に出てくる4・5行の文だけを見て判断。)これ型宣言してるみたいだから”キャスト”かなぁ・・・。
↓
「Java キャスト < >」でググってもそれらしいのは出てこない。キャストじゃないのかな?ListとかVectorとか(あとHash?)に特有の用法なのだろうか?
↓
そこで「Java List < >」でググるがやはり出てこない。
↓
「Java List キャスト < >」ではどうか?
出たっ!
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27750&forum=12&6
・・・?やっぱりキャストなのか?・・・どうも文脈からするとジェネリクスという技術の一部らしい。
「Java ジェネリクス」でググると
↓
第1回:ジェネリックス(1)JDK5を活用する
1. はじめに
ジェネリックスというのは、「<」と「>」で囲んだ型名をクラスやメソッドに付けることによって、汎用的なクラスやメソッドを特定の型に対応づける機能です。
コレダ━(゚∀゚)━( ゚∀)━( ゚)━( )━( )━(゚ )━(∀゚ )━(゚∀゚)━!!
ふーん、
ついに正式リリースとなったJava 2 Platform Standard Edition 5.0 Development Kit(JDK5)の新機能
ね。2004/10/18かぁ。なるほど。こりゃ手元のJava本には書いてないわなぁ。みんな2003年以前の本だから。くそう、本に思いっきり怒りをぶつけてやろうかと思ったのに・・・。
やっぱりタダで勉強するのは面倒だなぁ・・・。Java雑誌でも定期購読しないとイカンのか?
それはそうと、上記のサイトの説明分かりやすいな。というか、今までダウンキャスト(このブログで言うところのアンアップキャスト)しなければならない場面がそもそも想像できなかったので何でみんな困ってるのか分からなかったが、なるほど、こういう理由だったのね。
String s=(String)list.get(0);
↑こりゃ、確かに危険だわ。面倒だし。でもこのジェネリクスという文法を使って冒頭のコードのようにresultsを「Employee型の要素を持つList」とあらかじめ規定してしまえば、for文の条件節でああいう風に簡潔に書けるわけだ。イイねぇ。