错误。运算符<无法应用

时间:2014-11-12 15:41:04

标签: java generics compiler-errors

在第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;
       }
     }
 }

3 个答案:

答案 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)

简单来说,此运算符可应用于数字类型,例如intbytedoublefloat等及其拳击类(例如{{ 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;);