JavaでDuck Typing
Rubyではオブジェクトの型にかかわらずメッセージの受けわたし(メソッド呼び出し)を行えることをDuck Typingというが、わざわざ「Typing」と言ってしまうことに、ちょと違和感を感じた。
型の制約がないオブジェクト指向言語では、そもそもオブジェクトの型というものの意味が違うからである。
プロトタイプベースあるいはインスタンスベースのOO環境ではそれがあたりまえなわけで、そこから考えると「Typing」とわざわざ言わなくていいんじゃないかなと思ったわけです。
ところで、プロトタイプベースのNewtonScriptをいじっていたときに、Javaで(いわゆる(笑))Duck Typingができる仕組みを考えてみたことがあった。
共通の基底クラスをつくって、そこにリフレクション機能をつかってメッセージを受け取れる仕組みを作ったら、オブジェクトの型をすべて基底クラスの型であつかうように作ることができるのではいかという妄想です。(笑)
こんな感じです。
class DuckBase { public DuckBase invoke( String messegeType, DuckBase[] args ) { ... } }
そのオブジェクトの一番下のサブクラスからmessegeTypeとメソッド名が一致するメソッドを実行します。
だからなんだといわれそうですが。(笑)
つづく...