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

原文地址:https://www.cnblogs.com/hongdada/p/6236939.html