かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

JavaでDuck Typeが書けるか

う~ん、結論から言うと書けません。以上。っていうのもアレなんで試してみました。

public class Test{

	public static interface Hogeable{
		void hoge();
	}

	public static void test(Hogeable hogeable){
		hogeable.hoge();
	}

	public static class Foo{
		public void hoge(){
			System.out.println("Foo");
		}
	}

	public static class Bar{
		public void hoge(){
			System.out.println("Bar");
		}
	}

	public static void main(String[] args){
		final Foo foo = new Foo();
		final Bar bar = new Bar();

		test(new Hogeable(){
			public void hoge(){
				foo.hoge();
			}
		});

		test(new Hogeable(){
			public void hoge(){
				bar.hoge();
			}
		});
	}
}

結論から言うとAdaptorパターンになります。Javaのようなガチガチな静的言語では型を合わせるためのアダプタが必要なのです。本来は型をあわせるべきなんですね。

単発的なコードでは面倒でやりませんが、たまにプロジェクトの自前フレームワークで必要になったときはProxyパターンとAdaptorパターンを利用して、動的なAdaptorをリフレクションで生成するようにしています。でも大抵型をあわせることで対処するので、必要になるケースは少ないかな・・・

JavaScriptみたいに型がない言語なら楽なんですけどね。

投稿日時 : 2007年9月1日 1:08

Feedback

No comments posted yet.
タイトル
名前
Url
コメント