0

こんにちは、私はいくつかの興味深いコードに取り組んでおり、ある考えが頭をよぎりました。

単純化されたコードを次に示します。

public interface SomeInterFace<T>
{
    public List<T> doSomething();
}

ここで、たとえばさまざまなオブジェクト用にこのインターフェイスを拡張する必要がある別のインターフェイスを取得しました

public interface OtherInterface extends SomeInterface<Integer>, 
SomeInterFace<String>, SomeInterface<Number>, ...

オブジェクトのリストで「SomeInterface」を実装する方法で、この「OtherInterface」を記述する可能性はありますか?

4

1 に答える 1

4

の任意のタイプの型引数を処理できる場合はOtherInterface、他の人が示唆しているように、次のように書くことができます。

public interface OtherInterface<T> extends SomeInterface<T>

SomeInterfaceただし、型引数の特定のリスト(たとえば、Stringおよび)に対してのみ実装する必要がある場合はNumber、それを行うことはできません。コンパイル時に、型消去によるものにSomeInterface<(anything)>なり、コンパイラが安全でないキャストを実行しようとしていないことを確認した後(またはチェックしないように指示した後)にキャストが挿入されます。したがって、次のようなクラスを作成しようとします。SomeInterface

public interface OtherInterface extends SomeInterface, SomeInterface {
    public List doSomething();
    public List doSomething();
}

...明らかな理由で無効です!

お役に立てば幸いです。

于 2013-02-22T18:14:08.213 に答える