这是源代码:
public static < K,V >HashMap < K,V> newInstance(){
return new HashMap < K, V > ();
}
< K,V >HashMap< K,V>是一个返回类型,那么如题,前面的< K,V>是什么意思?
最前面的是定义,你后面要用到几个泛型,在前面的进行定义,算是语法吧。
public static Map list2Map(List list, String keyName,
Class keyClass) {
如这个例子,我需要用到K E,2个泛型,在方法最前面先定义。
返回这个类型
函数的返回值类型,这里不是特殊的
这都答的啥呀。。类型参数列表,泛型方法独有的,表明类型参数之间、以及参数与返回值之间的关系。泛型基础,建议看一下。
public static HashMap new Instance()
{
return new HashMap();
}
你
确认 new 和 Instance中间有空格么
确定HashMap是泛型模板么
确定这个函数 需要Static 静态函数么
public static <K, E> Map<K, E> list2Map(List<E> list, String keyName,
Class<K> keyClass) {
哎,编辑器把泛型给去掉了。。再发一次。
这种方式被称作类型推导(type inferernce),具体了解就百度吧。
这是Effective java中的一段代码。
public static <K,V> HashMap<K,V> newInstance(){
return new HashMap<K,V>();
}
HashMap前面的代表返回值的类型。具体调用可以像下面这样:
Map<String,List<String>> m = HashMap.newInstance();
这么写主要是为了避免当泛型很长的时候,代码显得冗余,例如:
Map<String,List<String>> m = new HashMap<String,List<String>>();
至于为什么public static <K,V> HashMap<K,V> newInstance(){}
这样写 是因为java的语法就是这样,详见该链接: Java语法
前面的表明这个方法是泛型方法。比如在任意普通类中加入如下两个方法
public <T> T getParam(T param){
return param;
}
public HashMap<K,V> getHash(){
return new HashMap<K, V>();
}
第一个方法的泛型是编译通过的;
但是第二个会提示can not resolve symbol
没明白你的问题是什么意思,通常使用时这样的HashMap = new HashMap();即创建对象实例时指定key和value的真实类型是什么。
而且你给的这段代码是有编译错误的,如果你这是java代码的话。正确应该是:
public static HashMap newInstance(){
return new HashMap();
}
而且,由于你没有指定K,V,编译器还会给出警告:
HashMap is a raw type. References to generic type HashMap<K,V> should be parameterized