著作一覧 |
Javaのメタプログラミングについて、どんな方法があるか、軽く調べている。
このうち、事前のソースコード生成(その後、javacしてjarする)は、とりあえず無視するとすると、
・リフレクション
・インタプリタ作る
・インタプリタ使う(JRubyとか、Rhinoとか)―微妙に反則
・自力でバイトコードを生成してロード
・ありもののコンパイラを使ってバイトコードを生成してロード
くらいだろう。
最後の手法が軽そうで良いなと思ってAPIリファレンスを眺める。
すると、javax.toolsがいかにも面倒そうなのでうんざりする。このうんざり感の原因には小クラス主義(1責務1インターフェイスあるいは、サブジェクト主義と名付けたくなる何か)にあるのだなということがわかる。
つまり、目的主義でAPIを眺めると、その目的にたどりつくまでのステップが多過ぎる。
その一方で、1責務1インターフェイスというのは、ケチのつけようがない考え方だと考えている自分にも気づく。
何かが間違いなのだろう。
伝統的な思考方法に則れば、そこに止揚すべき何かがある。
まず1つは、異なる界面をリファレンスのフラットな空間に配置していることが問題に見える。これはパッケージの使い方の問題だ。
そこで、界面を分離する。
すると、以下の図のようになる。
あと、ImplementationModel(既定の実装群)パッケージがあれば言うことなし。
ファイルのオープンダイアログを開いた瞬間、闇に呑み込まれますた。
VistaのAPIの闇が絶対あると思う。……というか、Explorerか……TortoiseSVN?
追記:仲間を発見。というか発見されたというか。
ジェズイットを見習え |
>VistaのAPIの闇が絶対あると思う。……<br><br>コールスタックがどうなっているかは興味があるところ.
何しろ、デバッガを起動するか?ダイアログさえ出ずに、まさにサドゥンデスなので、どうにもならないのですよ。
それはきついっすなぁ.<br>確実に再現する方法が分かっていれば,あらかじめプロセスをデバッガにアタッチしておくことで例外のキャッチぐらいはできるかもしれませんね.
Firefoxだから、ソースレベルでもできるし……と思ったけど、1回しか見てないですからね。Becky!のほうがもう少し頻度が高いから、仕掛けとこうかなぁ(思い出したら)。