我正在读这本书有效的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>
?
答案 0 :(得分:0)
写作时
public static HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
K
和V
是必须解析为某种类型(类名或接口名称)的常规标识符。
例如,如果您想要一个返回HashMap
密钥和String
值的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();
...