Java嵌套泛型类,只有一个类型参数

时间:2013-06-24 20:57:26

标签: java generics

我正在开发一个具有通用流接口的项目,该接口提供类型的值:

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

我有一个实现只是从文件或其他任何东西提供单个值。它看起来像这样:

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

我还想提供另一个提供值对的实现(比如,为每次调用get()提供接下来的两个值)。所以我定义了一个小的Pair类:

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

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

现在我想定义Stream接口的第二个实现,它只适用于Pair类,如下所示:

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

然而,这不会编译。

我可以这样做:

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

但还有更优雅的方式吗?这是“正确”的方式吗?

2 个答案:

答案 0 :(得分:5)

泛型类型参数Pair<T>无效;你只需要声明<T>并在实现界面时使用它。

//         Just <T> here;          Added missing (2nd) '>'
class PairStream<T> implements Stream<Pair<T>> {
    public Pair<T> get() { /* ... */ }
}

答案 1 :(得分:1)

你真正需要的是

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

这也可能有效:

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