因此,为了允许任何类型的对象,我必须在代码中使用泛型。
我已经重写了这个方法,但是当我创建一个对象时,例如Milk,它不会让我将它传递给我的方法。
Ether我的通用修订版有问题,或者我创建的Milk对象不好。
我应该如何正确传递我的对象并将其添加到链表?
这是一种在插入项目时导致错误的方法:
public void insertFirst(T dd) // insert at front of list
{
Link newLink = new Link(dd); // make new link
if( isEmpty() ) // if empty list,
last = newLink; // newLink <-- last
else
first.previous = newLink; // newLink <-- old first
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
这是我尝试插入链接列表的类:
class Milk
{
String brand;
double size;
double price;
Milk(String a, double b, double c)
{
brand = a;
size = b;
price = c;
}
}
这是插入数据的测试方法:
public static void main(String[] args)
{ // make a new list
DoublyLinkedList theList = new DoublyLinkedList();
// this causes:
// The method insertFirst(Comparable) in the type DoublyLinkedList is not applicable for the arguments (Milk)
theList.insertFirst(new Milk("brand", 1, 2)); // insert at front
theList.displayForward(); // display list forward
theList.displayBackward(); // display list backward
} // end main()
} // end class DoublyLinkedApp
声明:
class Link<T extends Comparable<T>>
{}
class DoublyLinkedList<T extends Comparable<T>>
{}
答案 0 :(得分:4)
根据您的错误,您已将T
定义为可比较
public class DoublyLinkedList<T extends Comparable<T>> {
但是你要添加一个不可比的类型。不清楚为什么你的类需要具有可比性,因为你似乎没有在你的插入方法中使用它,所以我会放弃这个要求。
public class DoublyLinkedList<T> {
如果你要复制JDK中的一个类,我建议你通过阅读它来源了解它是如何工作的。
http://www.docjar.com/html/api/java/util/LinkedList.java.html
答案 1 :(得分:1)
你必须像这样实例化你的列表:
DoublyLinkedList<Milk> theList = new DoublyLinkedList<Milk>();
我差点忘了......
Milk implements Comparable<Milk>
答案 2 :(得分:1)
嗯,你的Milk
还不够好 - 但并非全部。
它应该是:
class Milk implements Comparable<Milk>
(您需要实现此接口)。
另外:
Link newLink = new Link(dd);
和
DoublyLinkedList theList = new DoublyLinkedList();
类型DoublyLinkedList<Object>
(它们是原始类型) - (和Link<Object>
相同))也不能与所需类型相比较({{1} }不是Object
)
所以你应该这样做才能解决它:
Comparable<Object>
实施Milk
Comparable<Milk>
和DoublyLinkedList<Milk>
替代方案(For 1) - 如果您不需要Link<T>
功能 - 只需将它们声明为:
Comparable