Java泛型与继承的关系
2015-08-23 21:36
381 查看
示例代码:
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); } }
相关文章推荐
- spring事务管理几种方式(转)
- java基础-API-System、Runtime、Date、Calendar、Math
- 如何在EclipsePHP Studio中设置字体的大小
- Java学习笔记----容器
- java基础-API-集合框架-Map、Collections、Arrays
- Java源码分析之LinkedList
- android---从eclipse换到studio,出的各种问题
- Spring配置文件解析--集合注入方法
- 解决Struts2中的XML文件没有提示的问题
- Spring 入门案例1
- eclipse将android项目生成apk并且给apk签名
- java中hex转byte问题
- 【java开发】方法重写和方法重载概述
- java实现ArrayList LinkedList 和迭代器
- 清除行列(Java)
- 【java开发】封装与继承
- Struts和Spring的区别?
- Java之编程环境搭建,eclipse安装
- (2.1.20)java中的进程
- java基础-API-集合框架-Collection