類型約束:
import java.util.List; import java.util.ArrayList; import java.util.LinkedList; /** * Created by Administrator on 2016/12/30 0030. */ public class ListGenericFoo<T extends List> { private T[] fooArray; public T[] getFooArray() { return fooArray; } public void setFooArray(T[] fooArray) { this.fooArray = fooArray; } public static void main(String[] args) { ListGenericFoo<LinkedList> foo1 = new ListGenericFoo<LinkedList>(); ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>(); LinkedList[] linkedLists = new LinkedList[10]; foo1.setFooArray(linkedLists); ArrayList[] arrayLists = new ArrayList[10]; foo2.setFooArray(arrayLists); } }
繼承接口或者類,都用extends關鍵字
限制類型
ArrayList<? extends List> list=null; list=new ArrayList<LinkedList>(); list=new ArrayList<ArrayList>();
ArrayList中的泛型必須繼承是List(當然這里List是接口,不可能,但是類型可以)或者List的子類
ArrayList<? super ArrayList> list=null; list=new ArrayList<Object>(); list=new ArrayList<ArrayList>();
使用super關鍵字,泛型必須是繼承的類型的自己或者其父類。
類型限定在泛型類、泛型接口和泛型方法中都可以使用,不過要注意下面幾點:
1、不管該限定是類還是接口,統一都使用關鍵字 extends
2、可以使用&符號給出多個限定,比如
public static <T extends Comparable&Serializable> T get(T t1,T t2)
3、如果限定既有接口也有類,那么類必須只有一個,並且放在首位置
public static <T extends Object&Comparable&Serializable> T get(T t1,T t2)
http://www.cnblogs.com/mengdd/archive/2013/01/21/2869861.html
