Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有类型混淆的自定义Java迭代器_Java_Generics_Iterator - Fatal编程技术网

带有类型混淆的自定义Java迭代器

带有类型混淆的自定义Java迭代器,java,generics,iterator,Java,Generics,Iterator,我有一个泛型类,它绑定了一个对象和一个顺序: public class OrderedObject<T> { private int order; private T object; public OrderedObject(int order, T object) { this.order = order; this.object = object; } public int getOrder() {

我有一个泛型类,它绑定了一个对象和一个顺序:

public class OrderedObject<T> {
    private int order;
    private T object;

    public OrderedObject(int order, T object) {
        this.order = order;
        this.object = object;
    }

    public int getOrder() {
        return order;
    }

    public T getObject() {
        return object;
    }
}
后一个类不会编译,因为在

for (Iterator<OrderedObject<T>> it = s.iterator(); it.hasNext(); ) {
for(Iterator it=s.Iterator();it.hasNext();){

我忽略了什么?

混淆是因为内部类
OrderedObjectSetIterator
引入了一个泛型类型,称为与外部类相同的(
T
)。Eclipse IDE显示了一个警告:

The type parameter T is hiding the type T   
所以我想您不需要引入其他参数类型,只需使用与外部类定义相同的参数类型

基本上,内部类将被定义为:

private class OrderedObjectSetIterator implements Iterator<T> {
....
私有类OrderedObjectSetIterator实现迭代器{
....
迭代器方法如下所示:

public Iterator<T> iterator() {
    return new OrderedObjectSetIterator();
}
公共迭代器迭代器(){
返回新的OrderedObjectSetIterator();
}

您知道
TreeSet
,对吗?嗯……向OrderedObjectSetIterator添加公共无参数构造函数可以解决问题吗?当我没有看到任何显式构造函数时,我会产生怀疑。无论如何,我手边没有编译器,但是如果将内部类定义为
私有类OrderedObjectSetIterator实现,会发生什么ts迭代器
?我认为,
T
可能会在那里被重新定义。要扩展mmyers的评论,如果您使用TreeSet并定义compareTo()通过OrderedObject使用order字段,您可以免费获得效率更高的迭代器……而且不必编写所有可能的错误代码。这正是问题所在。我不需要其他参数类型。谢谢。已解决。我觉得建议的TreeSet方法是更优雅的应用解决方案。尽管如此,我还是很高兴我这么做了通过试验这套国产产品,了解仿制药。巴特
public Iterator<T> iterator() {
    return new OrderedObjectSetIterator();
}