複数のインタフェースを実装するオブジェクトを返すメソッドを指定することはできますか?複数のインタフェースをフルフィルにするメソッド戻り型
は、我々は次のインタフェースを持っていると言う:FooBar
の
interface FooBar {
[Foo] & [Bar] getFooBar();
}
interface Foo {
void doFoo();
}
inteface Bar {
void doBar();
}
実装者はFoo
ならびにBar
をfullfills型のインスタンスを返すメソッドgetFooBar()
を提供する必要があります。
はジェネリックでそれを行うことです:FooAndBarImpl
は、フレームワークやライブラリによって提供されるいくつかのタイプであると私は動作するはずだと思うFoo
とBar
これを実装していることを考えると
interface FooBar {
<T extends Foo & Bar> T getFooBar()
}
class SomeImplementor implements FooBar {
private FooAndBarImpl fSomeField;
public <T extends Foo & Bar> T getFooBar() {
return fSomeField;
}
}
。しかし、 "FooAndBarImplはTに変換できない"ため、そうではありません。何故ですか? getFooBar()
で暗示されている契約は、私が見ているように壊れていません。
もう1つの解決策は、Foo
とBar
に拡張された新しいインターフェイスを定義し、それを戻り値の型として使用することです。 getFooBar()
実装のfSomeField
の空白のラッパーを返すだけでは意味がありません。
他のアドバイスや説明をありがとうございます。
EDIT:ジェネリック医薬品のアプローチが動作しない理由を誰かが説明できる場合
はそれをお願い申し上げます。私はそれを見ない。
はタイプがフレームワークによって定義されているので(私が考えるもの)ジェネリック医薬品の問題 – davin