1

タイプの値を提供する汎用ストリーム インターフェイスを持つプロジェクトに取り組んでいます。

interface Stream<T> {
  T get();  // returns the next value in the stream
}

ファイルなどから単純に単一の値を提供する実装が 1 つあります。次のようになります。

class SimpleStream<T> implements Stream<T> {
  // ...
}

また、値のペアを提供する別の実装も必要です (たとえば、get() への呼び出しごとに次の 2 つの値を提供するため)。そこで、小さな Pair クラスを定義します。

class Pair<T> {
  public final T first, second;

  public Pair(T first, T second) {
    this.first = first; this.second = second;
}

次に、ペア クラスでのみ機能する Stream インターフェイスの 2 つ目の実装を次のように定義したいと思います。

// Doesn't compile
class PairStream<Pair<T>> implements Stream<Pair<T>> {
  // ...
}

ただし、これはコンパイルされません。

私はこれを行うことができます:

class PairStream<U extends Pair<T>, T> implements Stream<U> {
  // ...
}

しかし、もっとエレガントな方法はありますか?これはこれを行う「正しい」方法ですか?

4

2 に答える 2

5

ジェネリック型パラメーターPair<T>が無効です。<T>インターフェイスを実装するときに宣言して使用するだけです。

//         Just <T> here;          Added missing (2nd) '>'
class PairStream<T> implements Stream<Pair<T>> {
    public Pair<T> get() { /* ... */ }
}
于 2013-06-24T21:01:33.670 に答える
1

本当に必要なのは

class PairStream<T> implements Stream<Pair<T>> {
  // ...
}

これもうまくいくかもしれません:

class PairStream<U extends Pair<T>> implements Stream<U> {
    // ...
}
于 2013-06-24T21:04:42.817 に答える