利用之前提到的方法泛型的自动推断, 可以对一些泛型容器声明进行一些简化, 如下:
package com.cnsuning.src;
import java.lang.reflect.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// Map<Integer,String> map = new map<Integer,String>();
Map<Integer,String> map = New.map();
// List<String> list = new LinkedList<String>();
List<String> list = New.linkedList();
list.add("test1");
list.add("test2");
for(String test:list){
System.out.println(test);
}
}
}
class New{
public static <T> LinkedList<T> linkedList(){
return new LinkedList<T>();
}
public static <T,V> Map<T,V> map(){
return new HashMap<T,V>();
}
}
虽然进行了写法上的简化, 但同时别人阅读代码时也增加了理解New工具类的时间.
同时需要注意的是要利用返回值的类型自动推断时, 返回值必须是用于赋值, 其它如作为参数传递等情形编译器不会自动推断, 会出现错误导致程序运行失败.
如果不能根据类型自动推断确定泛型, 就需要用到显式类型说明:
package com.cnsuning.src;
import java.lang.reflect.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// Map<Integer,String> map = new map<Integer,String>();
Map<Integer,String> map = New.map();
// setList(New.linkedList()); 这样写导致编译报错
setList(New.<String>linkedList());
}
private static void setList(List<String> list){
;
}
}
class New{
public static <T> LinkedList<T> linkedList(){
return new LinkedList<T>();
}
public static <T,V> Map<T,V> map(){
return new HashMap<T,V>();
}
}