我有一个初始化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() > ();
}
答案 0 :(得分:1)
由于Class<?>
也是通用类型,您可以使用:
public static <K,V> void testMyMethods(Class<K> k, Class<V> v) {
Map<K, V> hm = new HashMap<>();
...
}
但只要您不使用k
和v
,就不需要提供任何内容:
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 <> ();