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