我一直在尝试创建一个链接列表,该列表使用泛型来返回用户选择的数据类型。问题是我的方法public E get(int sub)
我没有将return cursor.contents
识别为E generic
类型。
public E get(int sub)
{
Node cursor = head; //start at the beginning of linked list.
for (int c = 1; c <= sub; c++)
{
cursor = cursor.next; //move forward by one.
}
return cursor.contents;//return the element that the cursor landed on.
}
public class Node <E>
{
public E contents;
@SuppressWarnings("rawtypes")
public Node next = null; //points to the next node
//a method has no return type and has the same name as the class
public Node(E element)
{
this.contents = element;
}
}
如上所示,contents参数在Node中声明为type E
,但get方法不会将cursor.contents
识别为正确的返回类型。
系统建议我将返回类型更改为Object
,这不是一个选项。或者我将内容更改为已经完成的类型E
,但它仍然给我一个编译错误。
答案 0 :(得分:1)
您没有在Node cursor
变量的声明中设置泛型类型。将其更改为Node<E> cursor
时会发生什么。
另外,你没有提供链表类本身的上下文 - 那就是应该声明泛型<E>
的地方。
答案 1 :(得分:1)
那是因为您需要将其更改为:
public E get(int sub)
{
Node<E> cursor = head; //you forgot the generics here
for (int c = 1; c <= sub; c++)
{
cursor = cursor.next;
}
return cursor.contents;
}
public class Node <E>
{
public E contents;
public Node<E> next = null; //you also even suppressed the raw type here
public Node(E element)
{
this.contents = element;
}
}
答案 2 :(得分:1)
在你的方法中
public E get(int sub)
您将游标初始化为节点而不是Node<E>
。
Node cursor = head; //start at the beginning of linked list.
这将导致元素类型为Object,这是您在编写时获得的
return cursor.contents;
要解决:
使用Node<E>
或明确地将回复转换为E
答案 3 :(得分:0)
类的这些部分是否带有类型参数,例如MyLinkedList<E>
?问题可能是您向Node类添加了<E>
类型参数,这可能引用了不同的类E
,该类不一定是外部类引用的E
。尝试将Node <E>
更改为Node
。看看它是否有效。