JavaでGenericsを使ってStructual Subtypingできたよー
Structual Subtypingは、OCamlとかScalaとかにもあるらしい、アレです。
コード
interface Foo { public String foo(); } interface Bar { public String bar(); } interface Baz { public String baz(); } class FooBarImpl implements Foo,Bar { public String foo() { return "ふー"; } public String bar() { return "ばー"; } } public class Hoge { public <FooBar extends Foo & Bar> void hoge(FooBar foobar) { System.out.println(foobar.foo()); System.out.println(foobar.bar()); } public static void main(String[] args) { new Hoge().hoge(new FooBarImpl()); } }
出力結果
ふー ばー
んー、
できたよー、って言ってもいいんでしょうか?
実装クラスは、あらかじめインタフェースを指定しなければならないっていう縛りはある。
このコードは極端だとしても、ある程度細か目(メソッド数個程度?)にインタフェースを定義してやりつつクラスのimplementに追加してあげれば、柔軟な対応が出来そうな気がします。基本は、インタフェース継承禁止。