将特定的类参数传递给Java泛型函数

将特定的类参数传递给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(){

所以,我不熟悉Java泛型。我正在使用hashMap和hashSet构建一个图和一个邻接列表。我已经使用泛型编写了这个类及其方法。我还将T扩展到Node。 用于打印邻接列表

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