找不到标志 。在泛型类LinkedList

时间:2017-08-27 02:54:18

标签: java class generics cannot-find-symbol

我是java的新手,来自c ++背景。我在制作具有类似界面的泛型类时遇到了问题。在LinkedList类的SearchByID和SerchByName方法中,它给出了temp.value.getID()和temp.value.getName()的错误,我在main中创建了一个Linkedlist类的对象,所以根据我的理解,temp.value应该给出我是一个员工对象,我调用的是getID,它是Employee类的一个函数。但它仍然给我这个错误。有什么我不明白的理解?或者在这段代码中犯了错误。

找不到符号符号:方法getID()

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

这是我的Linkedlist类

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


    //completely encapsulated Node class from outer world as they dont need it
    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;
    }



    public Node<T> SearchByID(int id)
    {
        Node<T> temp ;
        for (temp = head; temp.value.getID() != id; temp = temp.next);
        return temp;
    }


    public Node<T> SearchByname(String name)
    {
        Node<T> temp ;
        for (temp = head; temp.value.getName() != name; temp = temp.next);
        return temp;
    }

1 个答案:

答案 0 :(得分:0)

请记住:Node的输入为Node<T>。默认情况下,T会删除到Object。因此,您正尝试在getID()上调用方法Object 肯定不存在

如果你想确保你能够获得具有该方法的对象,那么你需要为它使用一个接口......

public interface IdSearchable {
    int getID();
}

...然后将你的元素绑定到那个。

public class LinkedList<T extends IdSearchable & Comparable<T>> {

}

我把剩下的作为练习留给读者,因为你的第二种方法也有类似的缺陷。

最好将数据结构保持为开放状态,因为没有这种开放性,泛型变得毫无价值,因为您将T替换为Employee而不是HBox