タイプの値を提供する汎用ストリーム インターフェイスを持つプロジェクトに取り組んでいます。
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> {
// ...
}
しかし、もっとエレガントな方法はありますか?これはこれを行う「正しい」方法ですか?