将特定的类参数传递给Java泛型函数
所以,我不熟悉Java泛型。我正在使用hashMap和hashSet构建一个图和一个邻接列表。我已经使用泛型编写了这个类及其方法。我还将T扩展到Node。 用于打印邻接列表将特定的类参数传递给Java泛型函数,java,generics,hashmap,hashset,Java,Generics,Hashmap,Hashset,所以,我不熟悉Java泛型。我正在使用hashMap和hashSet构建一个图和一个邻接列表。我已经使用泛型编写了这个类及其方法。我还将T扩展到Node。 用于打印邻接列表 public class Graph<T extends Node>{ public static int time; private HashMap<T, HashSet<T>> adjacencyList; public Graph(){
public class Graph<T extends Node>{
public static int time;
private HashMap<T, HashSet<T>> adjacencyList;
public Graph(){
this.adjacencyList = new HashMap<>();
}
void printAdjacencyList(HashMap<T,HashSet<T>> adj){
for(T n : adj.keySet()){
System.out.print("Key: " + n.getValue()+"\t");
Iterator<T> i = adj.get(n).iterator();
while(i.hasNext()){
System.out.print(" "+i.next().getValue());
}
System.out.println();
}
}
}
公共类图{
公共静态整数时间;
私有HashMap邻接列表;
公共图(){
this.adjacencyList=new HashMap();
}
void printAdjacencyList(HashMap adj){
for(tn:adj.keySet()){
System.out.print(“Key:+n.getValue()+”\t”);
迭代器i=adj.get(n).Iterator();
while(i.hasNext()){
System.out.print(“+i.next().getValue());
}
System.out.println();
}
}
}
publicstaticvoidmain(字符串[]args){
图G=新图();
//添加了顶点和边
printAdjacencyList(G.adjacencyList);
}
这里,G.adjacencyList属于HashMap>类型。
Node是另一个具有几个成员的类
但是,我遇到了编译错误:
类型图中的方法printAdjacencyList(HashMap>)不适用于参数(HashMap>)
所以,据我所知,这意味着我要用HashMap>作为参数显式编写一个函数。
是否有任何方法可以以某种方式使用泛型函数(而不是编写带有必需参数的新函数)。问题是,您希望传递一个
HashMap
,但它需要一个HastMap
每个HashSet
也满足Set
的要求,但反之亦然
解决方案1:
void printAdjacencyList(HashMap adj){
=>
void printAdjacencyList(HashMap adj){
解决方案2:
private-HashMap-adjacencyList;
=>private-HashMap-adjacencyList;
很抱歉输入错误,我希望HashMap>被传递给一个将输入参数作为HashMap的函数。但是在这里,您要做的是将Set
传递给一个需要HastSet
的函数。这不起作用,因为HastSet更复杂han是一个集合。你可以将HashSet
传递给需要Set
的方法。但是你不能将集合传递给HastSet,因为Set比HastSetOk更原始。我理解。我编辑了这个问题。但我的问题是将HashMap传递给以HashMap为参数的函数。
public static void main(String[] args){
Graph<Node> G = new Graph<>();
// have added vertices and edges
printAdjacencyList(G.adjacencyList);
}