在HashMap <k,v>之前是什么意思<k,v>? Java中的泛型

时间:2018-02-28 14:07:26

标签: java generics

我正在读这本书有效的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>

1 个答案:

答案 0 :(得分:0)

写作时

public static HashMap<K, V> newInstance() {
    return new HashMap<K, V>();
}

KV是必须解析为某种类型(类名或接口名称)的常规标识符。

例如,如果您想要一个返回HashMap密钥和String值的Integer的方法,您可以写一下:

public static HashMap<String,Integer> newInstance() {
    return new HashMap<String,Integer>();
}

此方法将始终返回HashMap<String,Integer>,因此您只能将其分配给:

HashMap<String,Integer> map = newInstance();

但是,如果您希望KV是泛型类型参数,则必须将它们声明为此类。这就是你对<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();
...