![](/img/trans.png)
[英]How do you create a generic method in Java where one of the parameterized types must implement 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.