1.2 泛型的分类
泛型类
泛型方法
1.3 泛型类的定义的简单演示
关于泛型类的定义,这里只是了解即可,我们重点学习泛型类的使用。
// 2. E 是类型变量(Type Variable),变量名一般要大写
// 3. E 在定义时是形参,代表的意思是 MyArrayList 最终传入的类型,但现在还不知道
public class MyArrayList<E> {
private E[] array;
private int size;
...
}
注意: 泛型类可以一次有多个类型变量,用逗号分割。
1.4 泛型背后作用时期和背后的简单原理
泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念。
泛型代码在运行期间,就是我们上面提到的,利用 Object 达到的效果(这里不是很准确,以后会做说明)。
1.5 泛型类的使用
MyArrayList<Book> books = new MyArrayList<Book>();
books.add(new Book());
// 会产生编译错误,Person 类型无法转换为 Book 类型
books.add(new Person());
// 不需要做类型转换
Book book = book.get(0);
// 不需要做类型转换
// 会产生编译错误,Book 类型无法转换为 Person 类型
Person person = book.get(0);
通过以上代码,我们可以看到泛型类的一个使用方式:只需要在所有类型后边跟尖括号,并且尖括号内是真正的类型,即 E 可以看作的最后的类型。
注意: Book 只能想象成 E 的类型,但实际上 E 的类型还是 Object。
1.6 泛型总结
泛型是为了解决某些容器、算法等代码的通用性而引入,并且能在编译期间做类型检查。
泛型利用的是 Object 是所有类的祖先类,并且父类的引用可以指向子类对象的特定而工作。
泛型是一种编译期间的机制,即 MyArrayList 和 MyArrayList