我想这样写一个Interator:

class Plant { }
class Tree extends Plant { }
class Maple extends Tree { }

// Iterator class: compiler error on the word "super".
class MyIterator<T super Maple> implements Iterator<T> {
    private int index = 0;
    private List<Maple> list = // Get the list from an external source.

    public T next() {
         Maple maple = list.get(index++);
         // Do some processing.
         return maple;
    }

    // The other methods of Iterator are easy to implement.
}

从概念上讲,它的想法是让一个迭代器看起来像它返回Trees或Plants(即使它们始终是Maples),而无需为每个迭代器编写单独的类。

但是当我用T super Maple进行生成时,编译器不喜欢它。显然,您只能使用T extends Something来生成一个类。有谁知道完成同一件事的好方法?

我发问的动机是我有一个使用接口(interface)为其API的程序。我想要一种方法返回接口(interface)的迭代器(用于API),而另一种方法返回实现类的迭代器(供内部使用)。

最佳答案

另请:Why is there no lower bound for type parameters?

09-11 18:40