我正在创建一个实现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();
}
}
答案 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();
}
}
编译确定。