通用的地图打印函数

4

我有一个函数可以打印Map对象,

public static void printMap(Map<Integer, Integer> map) {
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {          
        System.out.println( entry.getKey() + " " + entry.getValue() );
    }
}

现在,我希望我的函数也能与Map<String, Integer>类型的映射一起使用。如何做到呢?我一直想使用泛型,希望从这个问题开始有一个良好的开端。

3个回答

8
您可以编写通用方法,如下所示的代码:
public static <K, V> void printMap(Map<K, V> map) {
    for (Map.Entry<K, V> entry : map.entrySet()) {          
         System.out.println( entry.getKey() + " " + entry.getValue() );
    }
}

建议阅读:


就像@JBNizet在评论中指出的那样,您也可以使用通配符(?)而不是类型参数来编写如下方法:

public static void printMap(Map<?, ?> map) {
    for (Map.Entry<?, ?> entry : map.entrySet()) {          
         System.out.println( entry.getKey() + " " + entry.getValue() );
    }
}

@PrasadKharkar。我建议你浏览一下链接的网站。那是关于泛型的精彩阅读。 - Rohit Jain
当然,我会浏览它。 - Prasad Kharkar
2
为什么要将这个方法定义为泛型?为什么不直接将其定义为以Map<?, ?>作为参数的方法? - JB Nizet
@JBNizet。哦!没错,那样会更好。我会编辑我的回答。谢谢 :) - Rohit Jain

2
您可以使用通配符 Map<? extends Object, Integer> 来实现此操作。这行代码的意思是,您可以具有任何扩展自 Object 类的内容,因此它可以是 StringIntegerUserDefinedObject。任何东西都可以。

1
怀疑你是否真的需要这个方法 - 只需使用Map实例的toString()方法即可。

不回答问题 - 它会有不同的行为。无论如何,OP在这里尝试学习泛型。 - Paul Bellora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接