EDIT2:在你们提出了很多很好的建议之后,我决定D
把T
. 作业中给出的方法确实指定了 a D
,但由于T
有效并且你们中的绝大多数人认为它应该是T
,我只是要更改它,我的老师可以处理它。如果我发现一些神奇的解决方法可以解决所有问题并使其D
正常工作,我会在此处发布。谢谢大家的帮助!我今天学到了很多。
编辑:我想重复一遍,因为我想我一开始并不清楚这一点,我不能把它改成T next()
. 在分配描述中,它将方法列为D next()
。我无法改变这一点,这就是它被赋予我的方式。对于那些建议我改变它的人,谢谢你的时间,但这不是一个选择。
我正在执行一项任务,其中为我提供了自定义 List 类的“骨架”,我必须编写所有方法。Node
最后还提供了一个类List
。我应该写一个方法Iterator
在其中的类。但是,由于泛型只出现在类中,所以我尝试编写的类一直告诉我无法解析为类型。我试过在 Node 类中编写这个类,但后来我明白了。next()
D next() throws NoSuchElementException
D
Node
Iterator
D
The return type is incompatible with Iterator<T>.next()
根据分配,迭代器类必须是类型T
,这就是类型List
,但next()
方法必须返回类型 D。请有人帮我理解我可以做些什么来让Iterator
类识别类型D
是同一个Node
班?我已经包含了没有实现任何其他方法的框架代码——我正在尝试编写的 Iterator 类位于“附加类”下的底部。
我到底如何才能使这种next()
方法起作用?感谢任何花时间向我解释这一点的人。
package list;
import java.lang.Iterable;
import java.util.Iterator;
import java.lang.IndexOutOfBoundsException;
import java.util.NoSuchElementException;
public class List<T extends Comparable<T>> implements Iterable<T> {
public class Node<D extends Comparable<D>> {
private D data;
private Node<D> next;
}
private Node head;
public List() {
head = null;
}
public boolean add(T newElt) {
if(head == null){
head.data = newElt;
head.next = null;
return true;
}
return false;
//Unfinished. Iterate to check for duplicates.
}
public T getFirst() throws NoSuchElementException {
throw new UnsupportedOperationException("You must write this method.");
}
public T get(int index) throws IndexOutOfBoundsException {
throw new UnsupportedOperationException("You must write this method.");
}
public T lookup(T element) {
throw new UnsupportedOperationException("You must write this method.");
}
public int size() {
throw new UnsupportedOperationException("You must write this method.");
}
public void delete(T element) throws NoSuchElementException {
throw new UnsupportedOperationException("You must write this method.");
}
public void reset() {
throw new UnsupportedOperationException("You must write this method.");
}
public String toString() {
throw new UnsupportedOperationException("You must write this method.");
}
public List<T> subList(int start, int end) throws NoSuchElementException {
throw new UnsupportedOperationException("You must write this method.");
}
public void removeSubList(int start, int end) throws NoSuchElementException {
throw new UnsupportedOperationException("You must write this method.");
}
public boolean equals(Object obj) {
throw new UnsupportedOperationException("You must write this method.");
}
public Iterator<T> iterator() {
throw new UnsupportedOperationException("You must write this method.");
}
public Comparator<List<T>> lengthComparator() {
throw new UnsupportedOperationException("You must write this method.");
}
public Comparator<List<T>> orderComparator() {
throw new UnsupportedOperationException("You must write this method.");
}
/*
* Additional classes
*/
public class ListIterator<T> implements Iterator<T>{
Node current = head;
public boolean hasNext() {
if(head.next == null){
return false;
}
return true;
}
public D next() throws NoSuchElementException{
return null;
}
public void remove() {
}
}
}