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

时间:2014-10-24 20:51:56

标签: java iterable

我正在创建一个实现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();
    }
}

2 个答案:

答案 0 :(得分:4)

通常,您创建一个实现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,如How to create a generic array in Java?

所示

答案 1 :(得分:0)

冗余演员阵容只有警告。当移除强制转换(以及冗余extends Object)时,它会编译:

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

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

编译确定。