繁体   English   中英

如何在泛型类中实现Iterable <>方法

[英]How to implement the Iterable<> method in a generic class

我正在创建一个实现Iterable的通用类SortedArray。 我的大问题是,对于这种特定方法,或者如果我缺少实现该方法的重要步骤,我一无所获。 使用此当前代码,当我在Unix上进行编译时,出现错误,指出了不可转换的类型。 任何可以帮助我解决此问题的反馈或信息,将不胜感激。 谢谢。

public class SortedArray< T extends Comparable< T > >
    extends Object
    implements Iterable < T > {

    private T[] internalArray;
    public Iterator<T> iterator() {
        return (Iterator<T>) Arrays.asList(internalArray).iterator();
    }
}

通常,您创建一个实现Iterator接口的内部类,这就是您在iterator方法中返回的内容。 这是一个例子:

//removed extends Object. The compiler will add this info for you
public class SortedArray<T extends Comparable<T>> implements Iterable<T> {

    private T[] internalArray;

    private class SortedArrayIterator implements Iterator<T> {
        int currentIndex;
        public SortedArrayIterator() {
            this.currentIndex = 0;
        }
        @Override
        public boolean hasNext() {
            return currentIndex < maxSize;
        }
        @Override
        public T next() {
            return internalArray[currentIndex++];
        }
        @Override
        public void remove() {
            for (int i = currentIndex; i < internalArray.length - 1; i++) {
                internalArray[i] = internalArray[i+1];
            }
        }
    }

    public Iterator<T> iterator() {
        return new SortedArrayIterator();
    }
}

与您的问题没有直接关系,但是使用通用数组时几乎没有问题。 确保使用正确的方法创建此private T[] internalArray ,该方法将Class<T>存储在某个地方,或者改为维护Comparable[] internalArray ,如如何在Java中创建通用数组所示

对于冗余演员表只有警告。 删除演员表后(冗余extends Object ),它将编译:

public class SortedArray< T extends Comparable<T>>
    implements Iterable < T > {

    private T[] internalArray;
    public Iterator<T> iterator() {
        return Arrays.asList(internalArray).iterator();
    }
}

编译确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM