Java泛型是JDK1.5引入的新特性,那么这个泛型引入的意义究竟是什么,并且要怎么用呢,以下是我对泛型的一些自我理解:
首先说Java中的泛型,引入的意义在于让一套代码可以用于多种类型,一般有三种使用场景,分别是泛型类,泛型接口,泛型方法。别管哪种形式,我理解的一个通用的概念就是泛型存在于其作用域内。这句话乍一看是废话,但是确是贯穿这三种形式的一句话。
先看泛型类:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package generic;
/**
*
* @author sunbowen
* @param <T>
*/
public class GenericClass<T> {
private T name;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}
再看泛型接口:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package generic;
/**
*
* @author sunbowen
* @param <T>
*/
public interface GenericInterface<T> {
public T get();
public void set(T t);
}
泛型接口中用到泛型的场景基本就是此接口中的方法里用到泛型。不管是返回值还是形参,类型的变化并不影响使用方法。
最后看泛型方法:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package generic;
/**
*
* @author sunbowen
*/
public class GenericMethod {
public <T> void setType(T t) {
}
public <T> T getType() {
return null;
}
}
泛型方法中用到泛型的场景基本就是此方法中里用到了泛型,如在形参中,如在返回值中。其类型的变化并不会影响使用方法。
下面举一个Java中本身的例子:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package generic;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author sunbowen
*/
public class GenericInner {
public static void main(String[] args) {
List<String> ls = new ArrayList<>();
ls.add("abc");
String str = ls.get(0);
List<Integer> li = new ArrayList<>();
li.add(1);
Integer itr = li.get(0);
}
}
总而言之,泛型的使用还是比较简单的,只要理解其中概念和使用场景,基本上就没有问题。