Java 泛型約束


類型約束:

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

http://blog.csdn.net/lonelyroamer/article/details/7864531

http://blog.csdn.net/aminfo/article/details/7909823


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM