转自:http://onewebsql.com/blog/generics-extends-super 以下基本够用了 Today we continue our mini-series on Java Generics. In previous posts we have investigated how to crash your IDE using Java wildcards, what beginners find surprising when creating parametriz…
泛型学习第一篇 1.泛型之擦拭法 泛型是一种类似"模板代码"的技术,不同语言的泛型实现方式不一定相同. Java语言的泛型实现方式是擦拭法(Type Erasure). 所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的. 例如,我们编写了一个泛型类Pair<T>,这是编译器看到的代码: public class Pair<T> { private T first; private T last; public Pair(T first, T l…
1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型数组. 协变数组好处:使得代码的灵活性更强. 协变数组的坏处:过于灵活导致类型混乱,比如: Peron[] arr = new Employee[5]; //Employee IS-A Person 可以执行 arr[0] = new Student();// Student IS-A Person…
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public class ErasedTypeEquivalence { public static void main(String[] args) { Class c1 = new ArrayList<String>().getClass(); Class c2 = new ArrayList<Integer…