1.泛型的理解
1、泛型又称参数化类型,是jdk5.0出现的新特性,解决数据类型的安全性问题
2、在类声明或实例化时只需要指定需要的具体类型即可
3、java泛型可以保证程序在编译时没有发出警告,运行时就不会产生ClassCastException异常
4、泛型的作用,可以在类声明时通过一个标识来表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
2.泛型的声明
interface 接口{}和class类
1、其中,T、K、V不代表值,而是表示类型
2、任意字母都可以。常用T表示,是Type的缩写
实例化:List strlist = new ArrayList<>();
注意:泛型T、E只能是引用类型,在指定泛型具体类型后,可以传入该类型或其子类类型
3.自定义泛型
class 类名
注意细节:
1、普通成员可以使用泛型(属性、方法);
2、使用泛型的数组不能初始化(T[] t = new T[]、数组在new时不能确定T的类型,或无法在内存中开辟空间)
3、静态方法中不能使用类的泛型、静态和类相关,在类加载时,对象还没有创建,JVM无法完成初始化工作
4、泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)
5、如果在创建对象时,没有指定类型,默认为Object
4.泛型方法和使用了泛型的方法
class Fish<T,R> {
public void run(){
//普通方法
}
public <U,M> void eat(U u,M m) {
//泛型方法
}
public void hi(T t) {
//使用了类声明的泛型
}
}
5.泛型的继承和通配符
1、泛型不具备继承性
List
2、<?>:支持任意泛型类型
3、<? extends A>:支持A类和A类的子类,规定了泛型的上限
4、<? super A>:支持A类和A类的父类,规定了泛型的下限
一般用于形参传递
public void equals(List<? extends A> list){
}
6.JUnit
1、JUnit是一个Java语言的单元测试框架
2、多数Java的开发环境都已经继承了JUnit作为JUnit为单元测试的工具