ガンマ先生、型がグズグズです。(IAdaptable)

真面目な解説は、最後に参考URLを載せたので、本文を読み飛ばして、リンク先を読んでクダサイ。


eclipseプラグインは、作りたいものの姿によって、使うべきAPIが千差万別となる為、
どんな時にでも使える知識…となると、少々難しい。
しかしながら、eclipseプラグインフレームワークの根幹を為し、どんな時でも頭の中から忘れちゃいけないAPIは存在する。

の二つ。その中でもとりわけ重要なAPIがいる。
それがorg.eclipse.core.runtime.IAdaptable。

public interface IAdaptable {
    public Object getAdapter(Class adapter);
}

たったこれだけのAPIなんだけれども、型システムを乗り越えた拡張性を実現する為に、
捻り出されたトンデモAPIだ。


こいつをキチンと理解する為には、もう2つAPIを知っていなければならない。

  • org.eclipse.core.runtime.IAdapterFactory
  • org.eclipse.core.runtime.IAdapterManager

ええと、のっけから、FactoryとManagerです。ガンマ先生。アンチパターンの薫りがします。
ぶっちゃけて言うと、臭います。
実の所、IAdaptable の実装を自前で行う事は多分、きっとほとんどない筈。
何故なら、自分の作ったプラグインを更に拡張出来る様に考える必要性が無いだろうし、
そもそも、型システムを乗越えなければ達成出来ない様な拡張性を考える位なら、
機能足したい人をコミッタにしてしまえ、みたいな。
拡張したい側の人間からすると、とりあえずIAdaptableだけ押えれば、特に何の問題も無いのです。


僕の考えからすると、IAdaptableは、四次元ポケットみたいなもので
苦しくなったら、取り合えず呼んでみる。戻ってくる値をデバッガで確認。
期待した型のインスタンスが取れたらラッキー。
そういうインターフェース。
何故ならIAdaptableは、eclipseに含まれるほとんど全てのAPIが何らかの形で継承しているので、getAdapterメソッドは、どこにでもあるのです。
つまりは、これがeclipseプラグイン開発を行き当たりばったりにする本質的な原因かと。


IAdaptableは、型の無い言語が得意なduckTypingを型付けの厳しい言語で行う為の抜け道なんじゃねぇかなぁ…とか。