Java GenericsによるDuck Typing
- 3-c1. Template in D: Duck Typingみたいなもの (http://www.kmonos.net/alang/wnd/topics/template.ja.html#duck)
class Duck { public void quack() { System.out.println("gaaa"); } } class Foo { public void quack() { System.out.println("...."); } } class test { public static <T> void func(T ducky) { ducky.quack(); //System.out.println(ducky.getClass()); } public static void main(String[] args) { func(new Duck()); func(new Foo()); } }
コンパイル時にduckyの型がObject型と認識されてquack()メソッドが見つからないというエラーが出た。ducky.quack()をコメントアウトして、逆コンパイラのJadを使って確認してもTがObject型になっている。test.
追記:
odzさんが2006/09/01の日記で「あと、Java では無理な Duck Typing も template なら可能だったり。」と書かれていた。仕組みはまだ分かっていないがJavaでできないのは残念。