Java学习笔记——泛型
2015-09-15 17:54
375 查看
假定T不仅要指定接口的类继承。使用下面的方式:
Java的泛型不具有共变性(假设B是A的子类,而Node<B>可视为一种Node<A>,则称Node具有共变性),只是能够使用类型通配字符?
与extends来声明变量。使达到类似的共变性。
若声明?
不搭配extends,则默觉得?
extends Object,如:
注意:这与声明Node<Object>不同。假设是声明为Node<Object>,则仅仅能參考至Node<Object>实例,以下的程序编译会出错:
应该是:
一旦使用?与extends限制了T的类型。就仅仅能通过T声明的名称取得对象指定给Object,或将T声明的名称指定为null。除此之外,不能进行其它指定动作
以上程序。仅仅知道value參考的对象类型会是继承Fruit。但实际上会是Apple还是Banana?假设实际上node.value是Banana的实例。那指定给Apple类型的apple就是不正确的
另:
Java的泛型语法仅仅在编译时检查。运行时类型中未知的。运行时期实际上仅仅会知道是Object类型(又称为“类型抹除”),如:
public class some<T extends Iterable<T> & Comparable<T>>{}
Java的泛型不具有共变性(假设B是A的子类,而Node<B>可视为一种Node<A>,则称Node具有共变性),只是能够使用类型通配字符?
与extends来声明变量。使达到类似的共变性。
Node<Apple> apple = new Node<>(new Apple(), null); Node<? extends Fruit> fruit = apple; // 相似共变性效果;假设是Node<Fruit> fruit = apple; 则会编译错误
若声明?
不搭配extends,则默觉得?
extends Object,如:
Node<?> fruit = null; // 相当于<span style="font-family: Arial, Helvetica, sans-serif;">Node<? extends Object></span>
注意:这与声明Node<Object>不同。假设是声明为Node<Object>,则仅仅能參考至Node<Object>实例,以下的程序编译会出错:
Node<Object> node = new Node<Integer>(1, null); // 没有共变性
应该是:
Node<?> node = new Node<Integer>(1, null);
一旦使用?与extends限制了T的类型。就仅仅能通过T声明的名称取得对象指定给Object,或将T声明的名称指定为null。除此之外,不能进行其它指定动作
Node<? extends Fruit> fruit = new Node<>(new Apple(), null); Object o = node.value; node.value = null; Apple apple = node.value; // 编译错误 node.value = Apple apple(); // 编译错误
以上程序。仅仅知道value參考的对象类型会是继承Fruit。但实际上会是Apple还是Banana?假设实际上node.value是Banana的实例。那指定给Apple类型的apple就是不正确的
另:
Java的泛型语法仅仅在编译时检查。运行时类型中未知的。运行时期实际上仅仅会知道是Object类型(又称为“类型抹除”),如:
List<Integer> list1 = new ArrayList<>(); List<String> list2 = new ArrayList<>(); System.out.println(list1.equals(list2)); // 输出true
相关文章推荐
- Java学习笔记(五)数组
- 更改eclipse的Package Explorer的字体
- Java的图片处理工具类【转】
- Java客户端与服务端通信转换必备工具
- Javaweb之JSP九大内置对象
- 【java】查找树按序转双向链表
- java命名规则
- eclipse mar 创建rest风格webservice ---->针对cxf(未完善)
- Solr II——通过SolrJ与Solr服务器进行数据交互
- Java语言中使用OpenMP
- Java Servlet 技术简介
- Java进阶之路 异常
- Java语言中使用OpenMP
- Java multithread
- 关于java普通类怎样获取当前的WebRoot目录。
- Java8 Lambda表达式之比较器
- Struts-config.xml配置文件讲解
- 一次Java内存泄漏的分析
- Struts 2 – i18n or localization example
- java第一个窗口