【发布时间】:2021-11-14 23:59:44
【问题描述】:
我不明白为什么我会得到类型 T 的方法 visit() 未定义。显然,这里的类型 T 应该是 Node。 Node 类有 visit() 函数。那么编译器在抱怨什么? 此代码应该是一个接受任何数据类型作为其节点的 Graph:
public class Graph<T>{
public Map<T, List<T>> map = new HashMap<>();
public void addEdge(T source, T destination, boolean bidirectional){
if (!map.containsKey(source)){
addVertex(source);
}
if (!map.containsKey(destination)){
addVertex(destination);
}
if (!map.get(source).contains(destination)){
map.get(source).add(destination);
}
if (bidirectional){
if (!map.get(destination).contains(source)){
map.get(destination).add(source);
}
}
}
public void bfs(T node){
Queue<T> q = new LinkedList<>();
node.visit();
System.out.println(node.n);
q.add(node);
int len;
while(!q.isEmpty()){
T n = q.remove();
n.visit();
System.out.println(n.n);
for (T i : map.get(n)){
if (!i.visited){
q.add(i);
}
}
}
}
static class Node{
int n;
boolean visited;
public Node(int n){
this.n = n;
visited = false;
}
public void visit(){
visited = true;
}
public void unvisit(){
visited = false;
}
}
public static void main(String[] args){
Graph<Node> g = new Graph<>();
Node zero = new Node(0);
Node five = new Node(5);
Node four = new Node(4);
g.addEdge(zero, five, false);
g.addEdge(zero, four, false);
g.bfs(zero);
}
}
【问题讨论】:
-
T是不是除了Node之外的任何东西? -
我试图实现一个泛型类,不管 T 是什么。在这种特定情况下,不,它总是一个节点。