泛型
来源:互联网 发布:淘宝友情链接有什么用 编辑:程序博客网 时间:2024/06/10 03:13
泛型跟继承的关系
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.junit.Test;public class TestGeneric { /** * 泛型与继承的关系: * 若类A是类B的子类,那么List<A>就不是List<B>的子接口 */ @Test public void test1() { Object obj = null; String str = new String("AA"); obj = str;//向上转型 Object[] obj1 = null; String[] str1 = new String[]{"AAA","BBB"}; obj1 = str1;//向上转型 List<Object> lo = null; List<String> ls = new ArrayList<String>(); //lo = ls;//错误,List<String>不是List<Object>的子接口 } /* * 通配符 ? * List<A>、List<B>、。。。。都是List<?>的子类 * * ? extends A :可以存放A及其子类 * ? super A:可以存放A及其父类 */ @Test public void test2() { List<?> list = null; List<Object> lo = new ArrayList<Object>(); List<String> ls = new ArrayList<String>(); list = lo; list = ls; show1(lo); List<? extends Number> ln = null; List<Integer> lin = new ArrayList<Integer>(); ln = lin; List<Object> lob = new ArrayList<Object>(); //ln = lob;//错误,? extends A :可以存放A及其子类 List<? super Number> ln2 = null; ln2 = lob; //ln2 = lin;//错误,? super A:可以存放A及其父类 } public <T> void show1(List<T/*此处T相当于传进来的类型*/> list) { } public void show2(List<?/*此处?相当于传进来的类型的父接口类型*/> list) { } @Test public void test3() { List<String> ls = new ArrayList<String>(); ls.add("aa"); ls.add("bb"); ls.add("cc"); List<?> li = ls; //可以读取声明为通配符的集合对象 Iterator it = li.iterator(); while(it.hasNext()) { Object o = it.next(); System.out.println(o); } //不能写进声明为通配符的集合对象,除了唯一例外的null //li.add("dd");//错误 //li.add(12);//错误 li.add(null); List<String> lstr = (List<String>)li;//强转回原来的类型就可以写进 lstr.add("ll"); System.out.println(lstr); }}
通配符
T有类型 ?无类型
public class AnimalTrainer {public void act(List<? extends Animal> list) {for (Animal animal : list) {animal.eat();}}}
public class TestAnimal {public static void main(String[] args) {AnimalTrainer animalTrainer = new AnimalTrainer();//Test 1List<Animal> animalList = new ArrayList<>();animalList.add(new Cat("cat1"));animalList.add(new Bird("bird1"));animalTrainer.act(animalList);//可以通过编译//Test 2List<Cat> catList = new ArrayList<>();catList.add(new Cat("cat2"));catList.add(new Cat("cat3"));animalTrainer.act(catList);//也可以通过编译}}
阅读全文
0 0
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- bzoj2326[HNOI2011]数学作业 矩阵乘法
- execute,executeQuery和executeUpdate的区别
- java从url中获取域名和虚拟目录
- 用EL表达式未生效
- 关于lamp去掉index.php
- 泛型
- mysql创建数据库和表并指定编码和校验集
- QT 中使用BeaEngine 反汇编引擎
- Python zlib()实现压缩和解压
- oracle之用户和表空间
- You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法
- 一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 基于Hash摘要签名的公网URL签名验证设计方案
- RecyclerVeiwDemo1