假定T不仅要指定接口的类继承。使用下面的方式:
public class some & Comparable>{}
Java的泛型不具有共变性(假设B是A的子类,而Node可视为一种Node,则称Node具有共变性),只是能够使用类型通配字符?
与extends来声明变量。使达到类似的共变性。
Node apple = new Node<>(new Apple(), null);
Node extends Fruit> fruit = apple; // 相似共变性效果;假设是Node fruit = apple; 则会编译错误
若声明?
不搭配extends,则默觉得?
extends Object,如:
Node> fruit = null; // 相当于Node
extends Object>
注意:这与声明NodeNodeNode,以下的程序编译会出错:
Node
应该是:
Node> node = new Node(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 list1 = new ArrayList<>();
List list2 = new ArrayList<>();
System.out.println(list1.equals(list2)); // 输出true
版权声明:本文博主原创文章,博客,未经同意不得转载。