この国では犬が

本と芝居とソフトウェア

プログラミング言語Java 第16章 リフレクション

を読みました。

 

リフレクション周りのクラス図、複雑すぎでは……。14個のクラス・インタフェースが出てきて、継承・実現関係の矢印が17本も伸びている。

特にType周り(Type、ParameterizedType、GenericArrayType、TypeVariable<D>、WildCardType、Class)がややこしくてややこしくて、というかそもそもジェネリック型もたいがい理解できてないので、さもありなんですね。

 

そして問題のプラガブルセレクタは、C++でいったら関数ポインタで実装できるような設計なのでは……?という気がしています。(ただ、『実装パターン』が手許になくてネット情報で考えてるので、詳細を検証できない)

あ、でも実装パターンだから、設計の問題じゃなくて、Javaでリフレクションを使う事自体に意味があるのか……。

 

でも16章の最初の方には

たとえば、「メソッドポインタ」としてMethodオブジェクトを使用すべきではありません。なぜならば、インタフェースと抽象クラスの方がよりよい道具だからです。 

 て書いてあるし!どういうことや!プラガブルセレクタは、あえてこの指針を破るケースなのでしょうか。

まあ確かに、リフレクションって使うといかにも実行時エラー起きやすそうで怖いってのは何となくわかります。コンパイル時にチェックされない(できない)部分がかなり大きくなりそうですよね。

 

そんな具合で理解がミディアムレア、いや炙り刺しレベル*1な気がしてならないですが、とりあえず次は第17章「ガーベッジコレクションとメモリ」です。

 

*1:リフレクションについては、「指定されたクラスの完全な宣言を表示するプログラムをリフレクションを使用して作成する」っていう練習問題16.9をやれば串焼きレベルの理解には達する気がします。(でも現時点の理解度から始めたら一日仕事になりかねないし、優先度的にいつ手をつけられるものやら怪しい……)