在第11行中出现错误。
operator < cannot be applied to java.lang.Object,java.lang.Object
我不太明白这一点,但我再次对Java中的泛型有了新的认识。拜托我。
public void sortbykey()
{
LinkedList temp = new LinkedList();
LinkedList third = new LinkedList();
temp=head;
if(temp!=null)
{
while(temp.next!=null)
{
if (temp.key < temp.next.key)
{
third.item = temp.key;
temp.key = temp.next.key;
temp.next.key = third.item;
}
else
temp = temp.next;
}
}
}
答案 0 :(得分:4)
要比较非数字类型,您需要在该类型上实施Comparable
,然后使用temp.key.compareTo(temp.next.key) < 0
。
如果您使用LinkedList<? extends Number>
,由于type erasure,它将不适用。但是,如果您指定一个包含<
运算符适用的基元的具体实现(请参阅autoboxing),例如LinkedList<Integer>
,那么从Integer
开始就可以实现被指定为绑定,Integer
换行int
,<
运算符适用于int
。
在您的情况下,由于您使用的是原始类型,因此java.lang.Object
运算符不适用于<
。就像我们这些人在阅读您的问题时一样,我们无法判断LinkedList
是否属于可以应用<
的类型。
通常应该避免使用原始类型,因为它们有效地剥离了其价值的泛型。
答案 1 :(得分:2)
简单来说,此运算符可应用于数字类型,例如int
,byte
,double
,float
等及其拳击类(例如{{ 1}},Integer
等。)
它与Generics不兼容,因为编译器不知道操作数的确切类型。使用Generics时,在类型擦除发生后,这些类型在运行时设置。
可能的解决方案是让Byte
属性的类实现key
接口,然后您就可以将其与以下内容进行比较:
Comparable<T>
答案 2 :(得分:0)
我无法确定,因为您还没有发布Node和LinkedList的数据结构,但它看起来就像您存储在&#39; key&#39;不是java原语,因此您无法使用&#39;&lt;&#39;运营商。确保key类似于int或float使用&lt;。否则,您需要在&#39;键&#39;的类型上使用类方法。例如,如果&#39;键&#39;是一个字符串,你可以使用(&#34; apple&#34;)。compareTo(&#34; banana&#34;);