2017-08-26 25 views
0

Je suis nouveau à java et j'ai rencontré un problème en faisant une classe générique avec une interface comparable. Dans la méthode sortedInsert de la classe LinkedList, il donne une erreur sur head.value.compareTo (new_node.value), je fais un objet de la classe Linkedlist en main donc, selon ma compréhension head.value devrait me donner un objet employé pour lequel je j'appelle compareTo. mais ça me donne encore cette erreur. Y at-il quelque chose que j'ai mal compris? ou faire une erreur dans ce code.compareTo avec linkedList générique

ne peut pas trouver le symbole symbole: méthode compareTo (T)

public class Employee implements Comparable<Employee> 
{ 
private int empID; 
private String name; 
private int salary; 
private boolean manager; 
private int subordinates; 

public Employee() 
{ 
    empID = 0; 
    name = ""; 
    salary = 0; 
    manager = false; 
    subordinates = 0; 
} 



public Employee(int id , String name , int salary , boolean manager , int sub) 
{ 
    empID = id; 
    this.name = name; 
    this.salary = salary; 
    this.manager = manager; 
    subordinates = sub; 
} 

public int GetID() 
{ 
    return this.empID; 
} 


public String GetName() 
{ 
    return this.name; 
} 

@Override 
public int compareTo(Employee other) 
{ 
    if (this.empID < other.empID) 
    { 
     return -1; 
    } 
    else if (this.empID > other.empID) 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
} 


public class LinkedList<T> 
    { 
    private int count; 
    private Node<T> head; 



    private class Node<T> 
    { 
     public T value; 
     public Node<T> next; 


     public Node(T data) 
     { 
      this.value = data; 
      this.next = null; 
     } 


    } 


    LinkedList() 
    { 
     count = 0; 
     head = null; 
    } 



    void sortedInsert(T data) 
    { 

     Node<T> current; 
Node<T> new_node = new Node<T>(data); 

     /* Special case for head node 
      head.value >= newNode*/ 

     if (head == null || (head.value.compareTo(new_node.value) == 1 || head.value.compareTo(new_node.value) == 0)) 
     { 
      new_node.next = head; 
      head = new_node; 
     } 
     else { 


      current = head; 

      while (current.next != null && (current.next.value.compareTo(new_node.value) == -1)) 
       current = current.next; 

      new_node.next = current.next; 
      current.next = new_node; 
     } 
    } 

Répondre

0

Vous pouvez essayer de passer à ceci:

public class LinkedList<T extends Comparable<T>> 
+0

-1 le code fonctionne bien mais vous n'avez pas donné d'explication de pourquoi cela fonctionne. OP est nouveau à Java sans apprendre la raison OP ferait probablement la même erreur à l'avenir. –

0

La variable head.value est pas nécessairement quelque chose qui implémente l'interface Comparable . Vous devez soit définir votre LinkedList<T> de telle sorte qu'il doit implémenter Comparable (voir la réponse de @ algrid) ou le convertir en utilisant la méthode compareTo.