JAVA wildcard 2---------"extends upper limit

package Class;

import java.util.ArrayList;
import java.util.List;

/*
* extends inheritance: can be understood as the upper limit of generic subclasses
*
*
*/
public class ExtendsTest {

public static void main(String[] args) {
    //Fruit为上限,(向下兼容)
    test<Fruit> text=new test<Fruit>();
    test<Apple> text1=new test<Apple>();
    test<Pear>  text2=new test<Pear>();
    //fujiApple的父类为Apple,而Fruit为fujiApple父类的父类,又因为其向下兼容,所以T的位置可为fujiApple。
    test<fujiApple> text3=new test<fujiApple>();

    //Fruit为上限,(向下兼容)
    List<? extends Fruit> list=new ArrayList<Fruit>();
    Text(list);
    List<? extends Fruit> list1=new ArrayList<Apple>();
    Text(list1);
    List<? extends Fruit> list2=new ArrayList<Pear>();
    Text(list2);
    List<? extends Fruit> list3=new ArrayList<fujiApple>();
    Text(list3);

    //但以下不行,Object超出Fruit范围
   /* List<?> list4=new ArrayList<Object>();
    Text(list4);
     List<? extends Object> list5=new ArrayList<Object>();
    Text(list5);
   */
}

static void Text(List<? extends Fruit> list) {
    //list.add(new Fruit());不能用在添加数据上,只能用在读取数据上
}
//泛型类,Fruit为T的上限
static class test<T extends Fruit> {

}

}

package Class;
/*
* inheritance chain graph
* object
* |
* Fruit
* / \
* Apple Pear
* |
*fujiApple
*/

public class Fruit {

}
class Apple extends Fruit{

}
class Pear extends Fruit{

}
class fujiApple extends Apple{

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325860537&siteId=291194637