我正在阅读《Effectiveprogramming in Java》一书,在阅读过程中我遇到了这样的代码片段:
public static <К, V> HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
表达式 <K, V>
表示什么?静态和 HashMap<K,V>
之间它是如何调用和工作的?我听说过泛型,但我不太了解它们,我想知道为什么不可能写一些像:
public static HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
为什么之前HashMap<K, V>
我需要写<К, V>
?
最佳答案
当你写作时
public static HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
K
和V
是必须解析为某种类型(类名或接口(interface)名)的常规标识符。
例如,如果您想要一个返回 HashMap
的方法有一个 String
key 和 Integer
值,你可以写:
public static HashMap<String,Integer> newInstance() {
return new HashMap<String,Integer>();
}
此方法将始终返回 HashMap<String,Integer>
,因此您只能将其分配给:
HashMap<String,Integer> map = newInstance();
但是,如果你想要K
和V
要成为泛型类型参数,您必须将它们声明为泛型类型参数。这就是你用 <K,V>
所做的事情:
public static <К, V> HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
这允许您使用此方法返回 HashMap
不同的键和值类型:
HashMap<String,Integer> map1 = newInstance();
HashMap<Long,Boolean> map2 = newInstance();
...
关于java - HashMap<K,V> 之前的 <K,V> 是什么意思? Java 中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49031448/