如何在方法声明中使用泛型

时间:2015-06-02 07:41:56

标签: java generics hashmap

我有一个初始化HashMap的控制器(例如)。我如何使用 HashMap的通用声明中的 k和v

public static void testMyMethods(Class k, Class v) {
    // Tried the below code, but it is having compile time issues
    HashMap < k.getClass(), v.getClass() > hm = new HashMap < k.getClass(), k.getClass() > ();
}

2 个答案:

答案 0 :(得分:1)

由于Class<?>也是通用类型,您可以使用:

public static <K,V> void testMyMethods(Class<K> k, Class<V> v) {
    Map<K, V> hm = new HashMap<>();
    ...
}

但只要您不使用kv,就不需要提供任何内容:

public static <K, V> void testMyMethods() {
    Map<K, V> hm = new HashMap<>();
    ...
}

我在声明中将HashMap更改为Map,请参阅 Effective Java - Item 52 以获取解释。

我使用了自Java 7以来可用的菱形运算符<>

答案 1 :(得分:-1)

在Java 7中,您可以像这样使用菱形运算符

HashMap< ?, ? > hm = new HashMap <> ();

?表示未定义的类型。

如果你真的不知道你的类型,那么就不需要告诉Java他们的类型了,你可以像这样声明

Map hm = new HashMap <> ();