<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Java</title><link>http://blogs.wankuma.com/nagise/category/1356.aspx</link><description>Java</description><managingEditor>凪瀬</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>凪瀬</dc:creator><title>わんくま同盟 富山勉強会レポート</title><link>http://blogs.wankuma.com/nagise/archive/2008/11/12/161028.aspx</link><pubDate>Wed, 12 Nov 2008 01:10:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/11/12/161028.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/161028.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/11/12/161028.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/161028.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/161028.aspx</trackback:ping><description>&lt;p&gt;11/8(土)にわんくま同盟 富山勉強会が開催されました。&lt;/p&gt;

&lt;p&gt;参加いただいた皆様、スピーカーを引き受けてくださった皆様、ネットから視聴していただいた皆様、どうもありがとうございました。&lt;/p&gt;

&lt;h4&gt;Wicketで変わるウェブ・アプリケーション開発&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/t_yano/"&gt;矢野勉&lt;/a&gt;氏のWicketのセッション。私が忘れ物をしたせいで、セッション時間を入れ替えてもらったという経緯あり。そんなわけで、自分はほとんど見ることができなかったのが悔やまれます。&lt;/p&gt;

&lt;h4&gt;RIAことはじめ&lt;/h4&gt;

&lt;p&gt;3月まで自分一緒にプロジェクトをやっていたhikaru氏に頼んでFlexの紹介セッションをやってもらいました。
初スピーカーで緊張気味でしたが、セッション狙い（「Flexで作ったアプリは簡単なのにリッチだ!!」といった部分を伝える）は達成できたんじゃないかな。&lt;/p&gt;

&lt;h4&gt;おひるごはん&lt;/h4&gt;

&lt;p&gt;私を含む8人で県民会館から少々歩いたところにあるうどん屋（本当は蕎麦屋なんだけど、最近蕎麦を出していない）「鶴喜」にて。富山の名店。平日と土曜の昼しか開いていないのでなかなか食べに行けない。&lt;/p&gt;

&lt;h4&gt;Javaのこれまでとこれから&lt;/h4&gt;

&lt;p&gt;本当は最初にやるはずだったセッション。この日の勉強会の各種セッションの土台となる部分を統括的に。Javaの歴史のおさらいと、最近の方向性を提示して、各セッションで具体的なところを見てもらうというつもりだったのですが。&lt;/p&gt;

&lt;p&gt;最近は、システム開発の環境改善には経済的側面をちゃんと考えないとうまくいかないよというのを痛感しているので、そちらの比重が高めにしてみました。&lt;/p&gt;

&lt;h4&gt;部屋移動&lt;/h4&gt;

&lt;p&gt;会場の都合で連続して部屋を確保できなかったので部屋移動が入ってしまいました。後半の部屋の方が椅子とか座り心地が良かった。富山県民会館を使うなら7Fの部屋の方がグレードが高いよ！&lt;/p&gt;

&lt;h4&gt;ライトニングトーク&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/katzchang/"&gt;katzchang氏&lt;/a&gt;による&lt;a href="http://ja.wikipedia.org/wiki/Io_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)"&gt;プログラミング言語Io&lt;/a&gt;の話。言語としてなかなか面白そう。&lt;/p&gt;

&lt;p&gt;daisuke氏によるメールサーバの管理の話。スパムのリレーが多くて挙句スパムのブラックリストに載せられてしまった！スパム対策どうしよう！といった話題。スパム対策は本当に頭の痛い問題です。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/t_yano/"&gt;矢野勉&lt;/a&gt;氏が飛び入りで１つやってくれました。業務で使うちょっとしたツールもJavaで書いちゃうぜってときに短く楽に書くためのコツみたいな話。潔い割り切りが重要。時間が余って晒し者タイムになったのでjava-jaでのLTの雰囲気とかそんな話も少々。&lt;/p&gt;

&lt;h4&gt;JavaからScalaへ&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://cappuccino.jp/keisuken/logbook/"&gt;keisuken氏&lt;/a&gt;のScalaセッション。と見せかけて本題は氏の開発する&lt;a href="http://webflavor.sourceforge.net/index_ja.html"&gt;Web Flavor&lt;/a&gt;だったりしたセッション。手続き型のプログラム言語しかやったことない人にはかなりのデカルチャーだったのではないでしょうか。自分もチャンスがあったらScalaを採用したいなぁ。&lt;/p&gt;

&lt;h4&gt;やっぱAppletやちゃ&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/yone098/20081109/1226201544"&gt;米林正明氏&lt;/a&gt;によるセッション。Java SE6 update10のドラッガブルアプレットとかそのあたりの話題。(&lt;a href="http://www3.atword.jp/jacksparrow/2008/10/09/java-se6-update10-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-applet-%E3%81%A7%E9%81%8A%E3%81%B6%EF%BC%81/"&gt;参考：Java SE6 update10 を使って Applet で遊ぶ！&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;これはデモのインパクトが大。会場が沸きました。JavaScript - Applet間での呼出しは実務でも応用が効きそうですね。注目すべき技術の一つでしょう。&lt;/p&gt;

&lt;p&gt;なお、タイトルの語尾「～やちゃ」は「～だよ」の富山弁表現。氏は富山の出身だそうで、今回の勉強会もスケジュールの厳しい中駆けつけてくれました。感謝！&lt;/p&gt;

&lt;h4&gt;懇親会&lt;/h4&gt;

&lt;p&gt;近くのお店に移動して懇親会。掘りごたつ型の座敷だったんだけど、席移動がしにくいのが難点かな。各所で話が盛り上がっていたのはいいのだけど、話す人が偏ってしまいましたね。&lt;/p&gt;

&lt;h4&gt;1.5次会&lt;/h4&gt;

&lt;p&gt;数名はラーメンの富山ブラックの大喜（富山駅前店）に吸い込まれていきました。県外の人は一度食べておくと話のネタになるかもしれない。個人的には、一度だけでいいんじゃないのとも思う。&lt;/p&gt;

&lt;h4&gt;2次会&lt;/h4&gt;

&lt;p&gt;白馬館という老舗バー。富山駅前の近くなので、電車やバスなどの人がいる場合には最適。自分は思い切り面が割れているので悪いことはできません。えぇ。&lt;/p&gt;

&lt;h4&gt;3次会&lt;/h4&gt;

&lt;p&gt;代行運転を捕まえて凪瀬邸へ。矢野氏は前日からの疲れからか付いた早々に爆睡。もうひとりのメンバーkeisuken氏としばらく話をして就寝。&lt;/p&gt;

&lt;h4&gt;翌日&lt;/h4&gt;

&lt;p&gt;朝に二人を送って富山駅へ。お土産を購入。富山の黒作り（イカスミ入りのイカの塩辛）を勧める。関西方面のkeisuken氏を見送った後、東京方面の電車の発射まで時間があったので矢野氏と朝食。話し込んでいたら時間ぎりぎりになってしまった。無事に乗れたようでなにより。&lt;/p&gt;

&lt;h4&gt;月曜日&lt;/h4&gt;

&lt;p&gt;気が緩んだのか風邪をひいたらしく、寒気がしてヤバい。夕方に早退して実家で養生。レポートが遅れてすいません。&lt;/p&gt;

&lt;h4&gt;関連記事&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/t_yano/20081109/1226260475"&gt;わんくま同盟 富山勉強会に参加してきました&lt;/a&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/yone098/20081109/1226201544"&gt;わんくま富山勉強会#01で発表してきました&lt;/a&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/katzchang/20081109/p1"&gt;わんくま富山勉強会&lt;/a&gt;
&lt;li&gt;&lt;a href="http://cappuccino.jp/keisuken/logbook/20081111.html#p02"&gt;わんくま同盟 富山勉強会 #01 まとめ&lt;/a&gt;
&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/161028.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>今週末は富山勉強会#1</title><link>http://blogs.wankuma.com/nagise/archive/2008/11/06/160554.aspx</link><pubDate>Thu, 06 Nov 2008 01:29:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/11/06/160554.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/160554.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/11/06/160554.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/160554.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/160554.aspx</trackback:ping><description>&lt;p&gt;いよいよ今週末土曜日が&lt;a href="http://www.wankuma.com/seminar/20081108toyama01/Default.aspx"&gt;わんくま同盟 富山勉強会 #01&lt;/a&gt;です。&lt;/p&gt;

&lt;p&gt;場所は富山県民会館です。当日参加も可能ですが、出来るだけ事前登録をお願いします。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10:40 ～ 10:50 わんくまについて&lt;/li&gt;
&lt;li&gt;10:50 ～ 11:40 「Javaのこれまでとこれから」&lt;a href="http://blogs.wankuma.com/nagise/"&gt;凪瀬 悠輝&lt;/a&gt;Lv2くまー&lt;/li&gt;
&lt;li&gt;11:50 ～ 12:20 「RIAことはじめ - Flex-Javaで簡単なアプリを作成してみる -」hikaru&lt;/li&gt;
&lt;li&gt;12:20 ～ 13:20 おひるごはん♪&lt;/li&gt;
&lt;li&gt;13:20 ～ 14:20 Wicket関連&lt;a href="http://d.hatena.ne.jp/t_yano/"&gt;矢野 勉&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;14:20 ～ 14:50 部屋移動&lt;/li&gt;

&lt;li&gt;14:50 ～ 15:20 ライトニングトーク&lt;/li&gt;
&lt;ul&gt;
	&lt;li&gt;katzchang&lt;/li&gt;
	&lt;li&gt;daisuke&lt;/li&gt;
	&lt;li&gt;スピーカー募集中！&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;15:20 ～ 16:10 「JavaからScalaへ、ScalaからJavaへ(仮)」&lt;a href="http://cappuccino.jp/keisuken/logbook/"&gt;keisuken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;16:20 ～ 17:10 Teeda、Applet関連&lt;a href="http://d.hatena.ne.jp/yone098/"&gt;米林正明&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;17:40 ～         懇親会&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;わんくま勉強会全般がそうですが、&lt;b&gt;懇親会がメイン&lt;/b&gt;です！&lt;/p&gt;
&lt;p&gt;いろんな人といろんな話ができるのはこうした勉強会の大きなメリットですね。
懇親会に参加される方はお店の予約の関係もあるので、できるだけ早く登録をお願いします。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/160554.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>Eclipseのリファクタリング機能を極める その１</title><link>http://blogs.wankuma.com/nagise/archive/2008/11/03/160414.aspx</link><pubDate>Mon, 03 Nov 2008 23:49:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/11/03/160414.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/160414.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/11/03/160414.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/160414.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/160414.aspx</trackback:ping><description>&lt;p&gt;Eclipseにはリファクタリングという便利な機能があります。このシリーズではその使い方をお送りしたいと思います。&lt;/p&gt;

&lt;p&gt;まずは手始めにrename機能からです。&lt;/p&gt;

&lt;h4&gt;Eclipeのリファクタリング リネーム機能&lt;/h4&gt;

&lt;p&gt;リファクタリングの初歩としてリネーム（名称変更）が挙げられます。&lt;/p&gt;

&lt;p&gt;Eclipse3.4では以下の要素に対してリネームを行うことができます。&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;型（クラス・インターフェース・列挙型）
&lt;li&gt;メソッド
&lt;li&gt;メソッドの引数
&lt;li&gt;フィールド
&lt;li&gt;ローカル変数
&lt;li&gt;ジェネリクス型パラメータ
&lt;li&gt;列挙
&lt;li&gt;コンパイル単位(.javaファイルのこと)
&lt;li&gt;パッケージ
&lt;li&gt;ソースフォルダ
&lt;li&gt;プロジェクト
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;Eclipse3.4ではリネームの際にテキストフィールド上で操作を完結することができますが、オプションを指定したい場合は▼をクリックすることでダイアログを開くことができます。&lt;/p&gt;

&lt;img src="http://nagise.wankuma.com/image/rename02.png"&gt;

&lt;p&gt;"Open Rename Dialog"を選択します。すると、選択中の要素に合わせたダイアログが表示されます。以下は特殊なオプションの存在する要素についての補足です。&lt;/p&gt;

&lt;h4&gt;型の場合&lt;/h4&gt;

&lt;p&gt;型のリネーム機能では、近い名前のフィールド名やメソッド名をリネームさせることができます。
Rename Typeダイアログで"Update similarly named variables and methods"「同名の変数・メソッドも更新する」を選択してください。
"Configure ..."を選択することで、型名のマッチング方法を設定することができます。&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;"Find exact names only"「完全に一致する名前だけを対象とします」
&lt;li&gt;"Also find embedded names"「語中に埋め込まれた名前も対象とします」
&lt;li&gt;"Also find name suffixes"「語尾が同じものを対象とします」
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;"Update textual occurrences in comments and strings"&lt;br&gt;
「コメント・文字列中にある型名を更新する」&lt;br&gt;
ではコメントやStringリテラル中にある型名を変更してくれます。
ただし、英文を前提にしているのか型名はスペースで区切られていないとうまく識別できません。
語と語の間に空白が入らない日本語のような環境下ではうまく機能しないことがあります。&lt;/p&gt;

&lt;p&gt;"Update fully qualified names in non-Java text files"&lt;br&gt;
「非Javaのテキストファイル中の完全名を更新する」&lt;br&gt;
では.javaファイル以外のテキストファイル中に現れる、完全名（パッケージ名の記述を省略しないクラス名表記）を更新します。
"File name patterns"で対象となるファイル名を絞り込むことができます。&lt;/p&gt;

&lt;h4&gt;メソッドの場合&lt;/h4&gt;

&lt;p&gt;"Keep original method ad delegate to renamed method"&lt;br&gt;
「オリジナルのメソッドを残して名称を変更したメソッドに処理を委譲します」&lt;br&gt;
Adapterパターンなどの実装時に便利です。&lt;/p&gt;

&lt;h4&gt;フィールドの場合&lt;/h4&gt;
&lt;p&gt;"Update textual occurrences in comments and strings"&lt;br&gt;
クラスに同じ&lt;/p&gt;

&lt;p&gt;"Rename getter: 'getHoge' to 'getPiyo'"&lt;br&gt;
"Rename setter: 'setHoge' to 'setPiyo'"&lt;br&gt;
getter/setterを併せてリネームします&lt;/p&gt;

&lt;h4&gt;列挙の場合&lt;/h4&gt;
&lt;p&gt;"Update textual occurrences in comments and strings"&lt;br&gt;
クラスに同じ&lt;/p&gt;

&lt;h4&gt;コンパイル単位の場合&lt;/h4&gt;
&lt;p&gt;"Update similarly named variables and methods"&lt;br&gt;
"Update textual occurrences in comments and strings"&lt;br&gt;
"Update fully qualified names in non-Java text files"&lt;br&gt;
クラスに同じ&lt;/p&gt;

&lt;h4&gt;パッケージの場合&lt;/h4&gt;
&lt;p&gt;"Rename subpackages"&lt;br&gt;
「サブパッケージも併せてリネームします」&lt;/p&gt;

&lt;p&gt;"Update textual occurrences in comments and strings"&lt;br&gt;
"Update fully qualified names in non-Java text files"&lt;br&gt;
クラスに同じ&lt;/p&gt;

&lt;h4&gt;機械的なリファクタリングの力&lt;/h4&gt;

&lt;p&gt;いかがでしょうか。これらの変更は、コンパイルと同じく静的に機械的に行われるもので、現在ではかなりの信頼性を持っています。
手作業でこういった作業を行う場合、時間がかかることもありますが、ヒューマンエラーによるミスの混入を防げません。
その点からしても、これらの機能を使わない手はないでしょう。&lt;/p&gt;

&lt;p&gt;過去にはこうした作業はヒューマンエラーによるバグ混入を恐れて、「極力行わないこと」としていたかもしれませんが、
機械的に相当の精度で行われると言う前提のもとでは、そのリスクも再評価せねばなりません。&lt;/p&gt;

&lt;p&gt;少なくとも、これらの要素の名称変更に対して昔ほどリスクを負わなくなったと言うことは把握しておいてください。
名称変更がそれほどリスキーではなくなった今、名称未確定のまま開発を進めることは難しくなくなったということでもあります。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/160414.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>ジェネリックなクラスの階層を遡って適用された具象型を得る</title><link>http://blogs.wankuma.com/nagise/archive/2008/10/29/160075.aspx</link><pubDate>Wed, 29 Oct 2008 00:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/10/29/160075.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/160075.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/10/29/160075.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/160075.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/160075.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://blogs.wankuma.com/nagise/archive/2008/10/13/158708.aspx"&gt;イレイジャではジェネリクスの何が消えるのか&lt;/a&gt;にて親クラスを継承する際に投入しているジェネリクス型パラメータはclassの情報として残っていることを述べました。&lt;/p&gt;

&lt;p&gt;これを利用すると、&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;A&amp;lt;X&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;B&amp;lt;Y&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;extends&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;A&amp;lt;Y&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;C&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;extends&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;B&amp;lt;String&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;といった継承階層があった場合に、C.classからA.classの&amp;lt;X&amp;gt;にどのような具象型が適用されているのか(上記例ではString型)をリフレクションで取得することができます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Aの型パラメータのプレースホルダ&amp;lt;X&amp;gt;を取得&lt;/li&gt;
&lt;li&gt;Bでsuper-classの型パラメータに渡されたTypeを取得&lt;/li&gt;
&lt;li&gt;2のTypeが具象型ではなく型パラメータ&amp;lt;Y&amp;gt;なのでさらにサブクラスを走査&lt;/li&gt;
&lt;li&gt;Cでsuper-classの型パラメータに渡されたTypeを取得&lt;/li&gt;
&lt;li&gt;B&amp;lt;Y&amp;gt;のYにString型が渡されていることが分かるのでA&amp;lt;X&amp;gt;のXがStringであることが分かる&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;といった感じです。型階層がいくらあるのか分からないので再帰で処理するとよいでしょう。&lt;/p&gt;

&lt;h4&gt;サンプルプログラム&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#3f5fbf"&gt;/**&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;渡された型から継承階層を登って、&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;指定の親の型の指定の名前のジェネリクス型パラメータが&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;継承の過程で何型で具現化されているかを走査して返す。&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;clazz&amp;nbsp;走査開始する型&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;targetClass&amp;nbsp;走査する対象のジェネリクス型パラメータを持つ型。&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;走査開始型の親である必要がある。&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;targetTypeName&amp;nbsp;何型で具現化されたを確認したい型パラメータのプレースホルダ名&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@return&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;具現化された型&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*/&lt;/font&gt;&lt;br /&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;static&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;T&amp;gt;&amp;nbsp;Class&amp;lt;T&amp;gt;&amp;nbsp;getGenericType&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;?&amp;gt;&amp;nbsp;clazz,&amp;nbsp;Class&amp;lt;?&amp;gt;&amp;nbsp;targetClass,&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;String&amp;nbsp;targetTypeName&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;!targetClass.isAssignableFrom&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;clazz&lt;/font&gt;&lt;font color="#000000"&gt;))&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;IllegalArgumentException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;型&amp;#34;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;clazz.getName&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;は、型&amp;#34;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;targetClass.getName&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;を継承していません&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;Stack&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt;&amp;nbsp;stack&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Stack&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;while&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;!targetClass.equals&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;clazz.getSuperclass&lt;/font&gt;&lt;font color="#000000"&gt;()))&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;stack.push&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;clazz&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;clazz&amp;nbsp;=&amp;nbsp;clazz.getSuperclass&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;getGenericTypeImpl&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;clazz,&amp;nbsp;targetTypeName,&amp;nbsp;stack&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#3f5fbf"&gt;/**&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;型パラメータの具象型取得の実装。再帰処理される。&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;clazz&amp;nbsp;現在の走査対象型&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;targetTypeName&amp;nbsp;現在の走査対象のジェネリクス型パラメータ名&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@param&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;stack&amp;nbsp;現在の走査対象型以下の継承階層が積まれたStack&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*&amp;nbsp;&lt;/font&gt;&lt;font color="#7f9fbf"&gt;@return&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;該当型パラメータの具現化された型&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;*/&lt;/font&gt;&lt;br /&gt;
&lt;font color="#646464"&gt;@SuppressWarnings&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;unchecked&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;private&amp;nbsp;static&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;T&amp;gt;&amp;nbsp;Class&amp;lt;T&amp;gt;&amp;nbsp;getGenericTypeImpl&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;?&amp;gt;&amp;nbsp;clazz,&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;String&amp;nbsp;targetTypeName,&amp;nbsp;Stack&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt;&amp;nbsp;stack&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;TypeVariable&amp;lt;?&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;extends&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;?&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;[]&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;superGenTypeAray&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;=&amp;nbsp;clazz.getSuperclass&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;.getTypeParameters&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;走査対象の型パラメータの名称(Tなど)から宣言のインデックスを取得&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;int&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;index&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#990000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;boolean&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;existFlag&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;for&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;TypeVariable&amp;lt;?&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;extends&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;?&amp;gt;&amp;gt;&amp;nbsp;type&amp;nbsp;:&amp;nbsp;superGenTypeAray&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;targetTypeName.equals&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;type.getName&lt;/font&gt;&lt;font color="#000000"&gt;()))&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;existFlag&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;index++;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;!existFlag&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;IllegalArgumentException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;targetTypeName&amp;nbsp;+&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;に合致するジェネリクス型パラメータがみつかりません&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;走査対象の型パラメータが何型とされているのかを取得&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;ParameterizedType&amp;nbsp;type&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;ParameterizedType&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;clazz.getGenericSuperclass&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;Type&amp;nbsp;y&amp;nbsp;=&amp;nbsp;type.getActualTypeArguments&lt;/font&gt;&lt;font color="#000000"&gt;()[&lt;/font&gt;&lt;font color="#000000"&gt;index&lt;/font&gt;&lt;font color="#000000"&gt;]&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;具象型で継承されている場合&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;y&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;instanceof&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Class&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;T&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;y;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;ジェネリックパラメータの場合&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;y&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;instanceof&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;TypeVariable&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;TypeVariable&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt;&amp;nbsp;tv&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;TypeVariable&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;y;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;再帰して同名の型パラメータを継承階層を下りながら解決を試みる&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;?&amp;gt;&amp;nbsp;sub&amp;nbsp;=&amp;nbsp;stack.pop&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;getGenericTypeImpl&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;sub,&amp;nbsp;tv.getName&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;,&amp;nbsp;stack&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;ジェネリック型パラメータを持つ型の場合&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;y&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;instanceof&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ParameterizedType&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;ParameterizedType&amp;nbsp;pt&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;ParameterizedType&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;y;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;Class&amp;lt;T&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;pt.getRawType&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;IllegalArgumentException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;予期せぬ型&amp;nbsp;:&amp;nbsp;&amp;#34;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;y.toString&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;&amp;nbsp;(&amp;#34;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;y.getClass&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;+&amp;nbsp;&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;#34;)&amp;#34;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/160075.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>Seasarなど命名規約ベースのDIではリネームに気をつける</title><link>http://blogs.wankuma.com/nagise/archive/2008/10/22/159408.aspx</link><pubDate>Wed, 22 Oct 2008 09:45:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/10/22/159408.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/159408.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/10/22/159408.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/159408.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/159408.aspx</trackback:ping><description>&lt;p&gt;Seasarでは命名規約に則ったクラス名のクラスのインスタンスを、同名のフィールドにインジェクションしてくれる機能があります。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;SampleService&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;/**&amp;nbsp;DIコンテナがインジェクションしてくれるフィールド&amp;nbsp;*/&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;HogeLogic&amp;nbsp;hogeLogic;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;exec&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;メソッド中はインスタンスフィールドにインジェクションされる前提でコードを書く&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.hogeLogic.hoge&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;これは命名規約を理解して使っている分には便利なのですが、Eclipseのリファクタリング機能などで
クラス名をリネームすると突如動かなくなることがあるので注意が必要です。&lt;/p&gt;

&lt;p&gt;上記例で、HogeLogicをPiyoLogicにリネームするとしましょう。HogeLogicのクラス名を選択して、Refactor → rename を選択します。
すると以下のようなバルーンが表示される(以下はEclipse3.4のスクリーンショット。確か3.2以前ではリネームは必ずダイアログでの入力だったはず)
ので新しい名前―ここではPiyoLogicとしましょう―を入力します。&lt;/p&gt;

&lt;img src="http://nagise.wankuma.com/image/rename01.png"&gt;

&lt;p&gt;すると、Eclipseのリファクタリング機能でクラス名をリネームすると、参照している箇所を網羅的に探してリネームしてくれるため、
プロジェクトの全ソース中でHogeServiceがPiyoServiceに変わります。&lt;/p&gt;

&lt;p&gt;この際、クラス名は変更されますが、同名のフィールド名まではリネームしてはくれません。
そのため、SampleServiceでのフィールド宣言は以下のようになります。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;/**&amp;nbsp;DIコンテナがインジェクションしてくれるフィールド&amp;nbsp;*/&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;PiyoLogic&amp;nbsp;hogeLogic;&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;フィールド名が元のままですね。これにより、命名規約違反が生じてうまくインジェクションされなくなります。
コンパイルエラーは起きませんが、実行時にインジェクションを期待したフィールドがnull値となり
NullPointerExceptionを発生させることになります。&lt;/p&gt;

&lt;p&gt;デフォルトのリネーム操作だとこのような問題が起きるのですが、Eclipseにはフィールド名を含めたリネームがサポートされています。
リネームの際に▼をクリックし、"Open Rename Dialog"とします。(キーボードショートカットのAlt+Shift+Rも活用しましょう)&lt;/p&gt;

&lt;img src="http://nagise.wankuma.com/image/rename02.png"&gt;
&lt;img src="http://nagise.wankuma.com/image/rename03.png"&gt;

&lt;p&gt;"Update similarly named variables and methods"にチェックを入れます。
同名の変数とメソッド(getter,setterなど)を更新する、という意味合いですね。
そうすると、以下のように変数名も同時にリネームしてくれます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;SampleService&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;/**&amp;nbsp;DIコンテナがインジェクションしてくれるフィールド&amp;nbsp;*/&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;PiyoLogic&amp;nbsp;piyoLogic;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;exec&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#3f7f5f"&gt;//&amp;nbsp;メソッド中はインスタンスフィールドにインジェクションされる前提でコードを書く&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.piyoLogic.hoge&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Seaserなどを利用している場合は、クラス名のリネームの際にはこの点に気を付けて作業しましょう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/159408.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>イレイジャではジェネリクスの何が消えるのか</title><link>http://blogs.wankuma.com/nagise/archive/2008/10/13/158708.aspx</link><pubDate>Mon, 13 Oct 2008 20:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/10/13/158708.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/158708.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/10/13/158708.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/158708.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/158708.aspx</trackback:ping><description>&lt;p&gt;Javaのジェネリクスはコンパイル時に解決され、classファイルになった時にはジェネリクスの型情報は残されていません。そのためイレイジャ（型消去：type erasure）方式と呼ばれます。&lt;/p&gt;

&lt;p&gt;と、ひとくちで言っても意味がよく分からないのでちょっと掘り下げてみましょう。&lt;/p&gt;

&lt;h4&gt;インスタンスからジェネリクスの型情報は拾えない&lt;/h4&gt;

&lt;p&gt;リフレクションを用いたとしても、インスタンスからジェネリクス型パラメータが何であるかを取得することはできません。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#000000"&gt;List&amp;lt;String&amp;gt;&amp;nbsp;stringList&amp;nbsp;=&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;ArrayList&amp;lt;String&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;のような変数stringListがあったとして、ここから&amp;lt;String&amp;gt;を取得するということができないのです。これが消えてしまった部分。&lt;/p&gt;

&lt;p&gt;この変数stringListに対する各種操作において、その型の安全はコンパイル時に精査され、
実行時にはあくまでObject型引数のメソッドを通したやりとりで動くのです。&lt;/p&gt;

&lt;h4&gt;クラス宣言に関わるジェネリクス型情報は拾える&lt;/h4&gt;

&lt;p&gt;しかし、型の宣言に関する部分はリフレクションで拾うことができます。ここが混乱する部分ですね。&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;親クラスを継承する際に投入しているジェネリクス型パラメータ
&lt;li&gt;インターフェースを実装する際に投入しているジェネリクス型パラメータ
&lt;li&gt;メソッドの引数・戻り値に用いられているジェネリックな型とそこに渡される型パラメータ
&lt;li&gt;フィールドに用いられているジェネリックな型とそこに渡される型パラメータ
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;といった情報は拾えるわけです。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;class&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Piyo&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;extends&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Hoge&amp;lt;String&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;implements&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;IHoge&amp;lt;String&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;private&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;List&amp;lt;String&amp;gt;&amp;nbsp;value;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;List&amp;lt;String&amp;gt;&amp;nbsp;get&lt;/font&gt;&lt;font color="#000000"&gt;()&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;return&amp;nbsp;this&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.value;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;public&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;void&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;List&amp;lt;String&amp;gt;&amp;nbsp;value&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7f0055"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.value&amp;nbsp;=&amp;nbsp;value;&lt;/font&gt;&lt;br /&gt;
&lt;font color="#ffffff"&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;
&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;といったコードがあった場合、リフレクションで親クラスがHoge&amp;lt;String&amp;gt;型であることを拾えます。インターフェースも同等。
また、フィールドやメソッドの戻り値・引数がList&amp;lt;String&amp;gt;型であることも拾うことができます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/158708.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>11/08は富山勉強会</title><link>http://blogs.wankuma.com/nagise/archive/2008/10/07/158353.aspx</link><pubDate>Tue, 07 Oct 2008 09:18:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/10/07/158353.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/158353.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/10/07/158353.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/158353.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/158353.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://blogs.wankuma.com/naka/archive/2008/10/02/158024.aspx"&gt;中さんのところ&lt;/a&gt;でも告知がでていましたが、
&lt;a href="http://www.wankuma.com/seminar/20081108toyama01/Default.aspx"&gt;わんくま同盟 富山勉強会 #01&lt;/a&gt;の募集が始まっています。&lt;/p&gt;

&lt;p&gt;2008/11/08(土)で場所は富山県民会館です。富山駅近辺ですので近県の方も是非いらしてくださいね。&lt;/p&gt;

&lt;p&gt;LT(ライトニングトーク)の登壇者募集中です。発表時間は5分きっかり。こちらはテーマも自由ですよ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/158353.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>アーキテクチャ選定ではメリットとデメリットを考える</title><link>http://blogs.wankuma.com/nagise/archive/2008/09/25/157505.aspx</link><pubDate>Thu, 25 Sep 2008 23:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/09/25/157505.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/157505.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/09/25/157505.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/157505.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/157505.aspx</trackback:ping><description>&lt;p&gt;アルゴリズムであるとか、アーキテクチャというのは、必ずメリットとデメリットがあります。&lt;/p&gt;

&lt;p&gt;プログラマは前提条件に合わせてメリットが活き、デメリットは表に出ないように考えアルゴリズムの選定します。アーキテクトがフレームワークやアーキテクチャを選定する時も同等です。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/kwatch/20080912/1221174865"&gt;「大規模プロジェクトではどうするか」を考えるより、「大規模にしないためにはどうするか」を考えよう&lt;/a&gt;というエントリに対し、私は&lt;a href="http://d.hatena.ne.jp/Nagise/20080915/1221462208"&gt;ネズミかゾウかではなくて、肥満か筋肉質かだろう&lt;/a&gt;と答えたわけですが、さて、では筋肉質なシステムとはどんなシステムか？という話になります。&lt;/p&gt;

&lt;p&gt;思うに、筋肉質なシステムというのは、選定したアーキテクチャなり、フレームワークなりのメリットが活き、デメリットが隠れるようになっている、そんなシステムのことではないでしょうか。&lt;/p&gt;

&lt;p&gt;だから、それが例えばCOBOLで新規開発という話だったとしても、「過去資産を活用する」というメリットが大きく、その過去資産の活用のための工数がデメリットにならず、過去資産を流用することで未来の保守の工数が嵩むといったデメリットもでない、というなら筋肉質と言えましょう。&lt;/p&gt;

&lt;p&gt;通常は、このメリット・デメリットを秤にかけて、相応にメリットが大きいという状況でないといけないわけで、&lt;a href="http://itpro.nikkeibp.co.jp/article/NEWS/20080906/314277/"&gt;東京海上の例&lt;/a&gt;では、本当にデメリットは小さいの？と疑問に思うわけです。&lt;/p&gt;

&lt;p&gt;さて、ではJavaのフレームワークの中ではすっかり枯れた技術という評判のStrutsはどうなのでしょうか？Strutsは初出が2001年と古く、近年のAJAXなどの対応を盛り込むにはマッチしないフレームワークだと私は評しています。非同期通信を伴わない、単純なWebシステムで工数を抑えて機能を量産するというなら、それなりにメリットは活きるでしょうし、デメリットは隠れるのではないかと思います。&lt;/p&gt;

&lt;p&gt;これはStrutsに限らず、PHPやRubyでの開発でも、状況によってはメリットは活きず、デメリットが表出することになります。そうしたミスマッチな選択をしたプロジェクトは、その無理から脂肪のような無駄なソースが膨らみ、デメリットだらけとなってしまうことでしょう。私が選定するならFlexなどのリッチクライアントとかかなぁ。ユーザ容貌的にそちらの方がマッチして贅肉が少なくなる気がしますね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/157505.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>内部クラスをリフレクションで扱う場合の注意点</title><link>http://blogs.wankuma.com/nagise/archive/2008/09/08/155887.aspx</link><pubDate>Mon, 08 Sep 2008 21:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/09/08/155887.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/155887.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/09/08/155887.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/155887.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/155887.aspx</trackback:ping><description>&lt;p&gt;Javaで一般に内部クラスと呼ばれるものはバリエーションが４つあるのですが、リフレクションでこれらを用いる場合に
結構ハマるポイントがあります。&lt;/p&gt;

&lt;table border="1"&gt;
&lt;tr&gt;
&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;判別法&lt;/th&gt;&lt;th&gt;外部クラスのインスタンス&lt;/th&gt;&lt;th&gt;コンストラクタ&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;staticなネストしたクラス&lt;/td&gt;&lt;td&gt;Class#isMemberClass()がtrue かつ、Class#getModifiers()がModifier#isStatic()でtrue&lt;/td&gt;
&lt;td&gt;アクセス不可&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;エンクロージング型内部クラス&lt;/td&gt;&lt;td&gt;Class#isMemberClass()がtrue かつ、Class#getModifiers()がModifier#isStatic()でfalse&lt;/td&gt;
&lt;td&gt;外部クラス名.this でアクセス可能&lt;/td&gt;
&lt;td&gt;第一引数に暗黙に外部クラスのインスタンスを受け取る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;メソッド内で定義されるローカルクラス&lt;/td&gt;&lt;td&gt;Class#isLocalClass()&lt;/td&gt;
&lt;td&gt;宣言されたメソッドがstaticなら不可。インスタンスメソッドならば、外部クラス名.this でアクセス可能&lt;/td&gt;
&lt;td&gt;インスタンスメソッドで宣言された場合、第一引数に暗黙に外部クラスのインスタンスを受け取る&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;匿名クラス&lt;/td&gt;&lt;td&gt;Class#isAnonymousClass()&lt;/td&gt;
&lt;td&gt;外部クラス名.this でアクセス可能&lt;/td&gt;
&lt;td&gt;第一引数に暗黙に外部クラスのインスタンスを受け取る&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;とあって、staticなネストしたクラスとエンクロージング型内部クラスの判別が面倒臭い。&lt;/p&gt;

&lt;p&gt;また、staticなネストしたクラス以外は、暗黙にコンストラクタの第一引数に外部クラスのインスタンスを受け取るので
リフレクションでConstructorを扱う時にはシグネチャに注意。
とくに、メソッドで定義するローカルクラスは、宣言がstaticメソッドか、インスタンスメソッドかで
違ってくるためClass#getModifiers()の値を確認して丁寧に対応する必要があります。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/155887.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>凪瀬</dc:creator><title>11/8 わんくま富山勉強会 #1 ～Javaの未来を考える～</title><link>http://blogs.wankuma.com/nagise/archive/2008/09/01/155039.aspx</link><pubDate>Mon, 01 Sep 2008 20:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagise/archive/2008/09/01/155039.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagise/comments/155039.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagise/archive/2008/09/01/155039.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagise/comments/commentRss/155039.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagise/services/trackbacks/155039.aspx</trackback:ping><description>&lt;p&gt;わんくま勉強会の地方開催シリーズ。北陸のエンジニアのみなさん、お待たせしました。&lt;/p&gt;

&lt;p&gt;2008年11月8日に「11/8 わんくま富山勉強会 #1」を開催いたします。
副題として「Javaの未来を考える」とテーマを設けさせてもらいました。
普段仕事でJavaを使っている方々をメインターゲットに、
今後の業界動向を展望するセッションで出迎えたいと考えています。&lt;/p&gt;

&lt;p&gt;会場は&lt;a href="http://kenminkaikan.com/"&gt;富山県民会館&lt;/a&gt;です。
JR富山駅から徒歩10分ほどですので、近県の方もぜひお越しください。&lt;/p&gt;

&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.jp/maps?q=%E5%AF%8C%E5%B1%B1%E7%9C%8C%E6%B0%91%E4%BC%9A%E9%A4%A8&amp;amp;lr=lang_ja&amp;amp;ie=UTF8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;s=AARTsJoNfYnADj-laaE7LmvPLUO0fJObJQ&amp;amp;ll=36.697122,137.211986&amp;amp;spn=0.012043,0.018239&amp;amp;z=15&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.co.jp/maps?q=%E5%AF%8C%E5%B1%B1%E7%9C%8C%E6%B0%91%E4%BC%9A%E9%A4%A8&amp;amp;lr=lang_ja&amp;amp;ie=UTF8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;ll=36.697122,137.211986&amp;amp;spn=0.012043,0.018239&amp;amp;z=15&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;大きな地図で見る&lt;/a&gt;&lt;/small&gt;

&lt;p&gt;セッション内容などについては、詳細が決まり次第お伝えしますのでお楽しみに！&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagise/aggbug/155039.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>