Java “如何修复”;“方法不适用于参数”;此代码中使用泛型的问题

Java “如何修复”;“方法不适用于参数”;此代码中使用泛型的问题,java,generics,Java,Generics,我正在尝试对我的链表实现一个迭代方法,以使它更可读、更紧凑,因为它被多次使用。我假设的代码的问题是没有正确理解Java泛型的方法声明。这就是我得到的错误: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method iterate(Nodes<T extends Nodes<T>>) in the type LinkedList<T> is not

我正在尝试对我的链表实现一个迭代方法,以使它更可读、更紧凑,因为它被多次使用。我假设的代码的问题是没有正确理解Java泛型的方法声明。这就是我得到的错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method iterate(Nodes<T extends Nodes<T>>) in the type LinkedList<T> is not applicable for the arguments (Nodes<T>)
线程“main”java.lang中出现异常。错误:未解决的编译问题:类型LinkedList中的方法iterate(节点)不适用于参数(节点)
我试图混淆预期的数据类型和参数,但无法准确找出问题所在。我检查了其他一些问题,但不一定能找到我要的,或者可能无法理解解释

  public class LinkedList<T> extends ListTemplate<T>
     {
       Nodes<T> head;
       Nodes<T> tail;
//declaration of method
       private <T extends Nodes<T>> Nodes<T> iterate(Nodes<T> head)
     {
    Nodes<T>iterate=head;
    while(iterate.getNext()!=null)
     {
        iterate=iterate.getNext();
     }
    return iterate;
     }
//the method call
public void Enqueue(T data)
    {
        Nodes<T>new_node=new Nodes<T>(data);
        //head is set for null when list is empty
        if(head==null)
        {
        //if the list is empty both head and tail will box new_node
        head=new_node;
        tail=new_node;
        }
        //if we insert something to list head wont be null
        else if(head!=null)
        {
        tail=iterate(head);
        tail.setNext(new_node);
        }
}

公共类LinkedList扩展了ListTemplate
{
节头;
节尾;
//方法声明
私有节点迭代(节点头)
{
Nodesiterate=头部;
while(iterate.getNext()!=null)
{
iterate=iterate.getNext();
}
返回迭代;
}
//方法调用
公共无效排队(T数据)
{
Nodesnew_node=新节点(数据);
//当列表为空时,head设置为null
if(head==null)
{
//如果列表为空,则head和tail都将框选新节点
head=新的_节点;
tail=新的_节点;
}
//如果我们在列表中插入一些内容,则head不会为空
else if(head!=null)
{
尾部=迭代(头部);
tail.setNext(新的_节点);
}
}
当我不尝试创建单独的方法并在代码中实现时,代码会起作用。预期的结果是,此方法会遍历我提供的节点列表并返回最后一个节点。我不确定我的错误,但可能是一个声明有问题。

关于这一行:

private <T extends Nodes<T>> Nodes<T> iterate(Nodes<T> head)

您的意思是T既是节点内容的类型,也是返回的Nodes对象的类型

   private <T extends Nodes<T>> Nodes<T> iterate(Nodes<T> head)
私有节点迭代(节点头)
您可以改为这样说:

   private Nodes<T> iterate(Nodes<T> head)
私有节点迭代(节点头)
   private Nodes<T> iterate(Nodes<T> head)