泛型(Generic)

jdk1.5新增特性

  • 在jdk1.5之前没有泛型,会导致集合中加入的数据类型不统一,并且不会出现编译错误,但没有问题恰恰就是最大的问题。
List<Stirng> list = new ArrayList<String>();

  • 所以引入了泛型,(泛型的类型是一个类,不能是基本数据类型,使用包装类)指定了某一种类型就不能加入另外一种类型,在编译的时候就会进行类型检查,保证了数据的安全。
  • 泛型的基本使用

Map<String,Object> map = new HashMap<String,Object>();
map.add("suitianshuang",130);
Set<Map.Entry<String,Integer>> entry = map.entrySet();
Iterger<Map.Entry<String,Integer>> iterator = entry.iterator();

while(iterator.hasNext()){
Map.Entry<Stirng,Integer> e = iterator.next();
String key = e.getKey();
Integer value = e.getValue();
}

  • 如果实例化的时候没有指明泛型,默认类型为java.lang.Object类型。
  • 自定义泛型类

public class Person<T> {

private String name;
private String age;
private T t;

public Person() {
this.name = name;
this.age = age;
this.t = t;
}

public String getName() {
return name;
}

public String getAge() {
return age;
}

public T getT() {
return t;
}

public void setName(String name) {
this.name = name;
}

public void setAge(String age) {
this.age = age;
}

public void setT(T t) {
this.t = t;
}
  • 自定义泛型方法
public <E> List<E> copyFormArrayToList(E[] arr){
ArrayList<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}

** 泛型方法可以声明为static,主要原因是泛型参数是在调用方法的时候确定的,而不是在类被实例化的时候确定的。**