Java自学-泛型 通配符

Java 泛型通配符 ? extends super 的用法

示例 1 : ? extends

ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型
heroList 的泛型可能是Hero
heroList 的泛型可能是APHero
heroList 的泛型可能是ADHero
所以 可以确凿的是,从heroList取出来的对象,一定是可以转型成Hero的

但是,不能往里面放东西,因为
放APHero就不满足
放ADHero又不满足

![? extends]( https://img-blog.csdnimg.cn/20190609162814720.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2plZGR6ZA==,size_16,color_FFFFFF,t_70)

package generic;

import java.util.ArrayList;

import charactor.ADHero;
import charactor.APHero;
import charactor.Hero;

public class TestGeneric {

public static void main(String[] args) {

ArrayList apHeroList = new ArrayList();
apHeroList.add(new APHero());

ArrayList<? extends Hero> heroList = apHeroList;

//? extends Hero 表示这是一个Hero泛型的子类泛型

//heroList 的泛型可以是Hero
//heroList 的泛型可以使APHero
//heroList 的泛型可以使ADHero

//可以确凿的是,从heroList取出来的对象,一定是可以转型成Hero的

Hero h= heroList.get(0);

//但是,不能往里面放东西
heroList.add(new ADHero()); //编译错误,因为heroList的泛型 有可能是APHero

}

}

示例 2 : ? super

ArrayList heroList<? super Hero> 表示这是一个Hero泛型或者其父类泛型
heroList的泛型可能是Hero
heroList的泛型可能是Object

可以往里面插入Hero以及Hero的子类
但是取出来有风险,因为不确定取出来是Hero还是Object

![? super]( https://img-blog.csdnimg.cn/20190609162910592.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2plZGR6ZA==,size_16,color_FFFFFF,t_70)

package generic;

import java.util.ArrayList;

import charactor.ADHero;
import charactor.APHero;
import charactor.Hero;

public class TestGeneric {
public static void main(String[] args) {

ArrayList<? super Hero> heroList = new ArrayList

posted on 2020-01-19 21:22  半米高峰  阅读(378)  评论(0)    收藏  举报

导航