【问题标题】:cannot find Symbol . in generic class LinkedList找不到标志 。在泛型类 LinkedList
【发布时间】:2017-08-27 02:54:18
【问题描述】:

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

这是我的链表类

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

【问题讨论】:

  • 你的主要类实现是什么?分享问题本身。
  • class LinkedList&lt;T extends Comparable&lt;T&gt;&gt;更改为:class LinkedList&lt;T extends Employee&gt;

标签: java class generics cannot-find-symbol


【解决方案1】:

记住:Node 被输入为Node&lt;T&gt;。默认情况下,T 会擦除为 Object。因此,您尝试在 Object 上调用方法 getID()肯定不存在

如果您想确保能够获取包含该方法的对象,那么您需要为其使用接口...

public interface IdSearchable {
    int getID();
}

...然后将您的元素绑定到它。

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

}

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

最好让数据结构按照您的需要保持开放,因为如果没有这种开放性,泛型就会变得毫无价值,因为您会将每次出现的T 替换为Employee

【讨论】:

  • 基本上我想要一个完整的通用 LinkedList 类,它可以用员工、任务等实例化,例如 Linkedlist 或 Linkedlist 。每个都应该有可比性。我可以从 Linkedlist 类中调用它们的函数。我已经在员工中声明了 getID,它应该调用员工的 getID。我是java新手,我在这里被困了大约3个小时。
  • 这就是我在这里选择更多界面的原因。因为T 实际上是Object,所以您不能为每个类调用任何定义的方法。如果您的接口要求您的数据类实现这些方法,您将能够使用您的自定义方法。
  • 在这种情况下我应该如何实现接口。任何入门代码将不胜感激。
  • ...考虑到我确实在我的回答中提供了一些起始代码...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多