泛型(generic)
可以做类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型
好处:编译时,检查添加元素的类型,提高了安全性;减少了类型转换的次数,提高了效率;不再提示编译警告
语法
interface 接口<T>{}和class 类<K,V>{}
- 其中,T,K,V不代表值,而是表示类型
- 任意字母都可以。通常用T表示
- 泛型实例化
e.g: List<String> strList = new ArrayList<String>();
e.g: Iterator<Customer> iterator = customers.iterator();
细节
-
给泛型指定数据类型时,要求是引用类型不能是基本数据类型
-
在给泛型指定具体类型后,可以传入该类型或其子类类型
-
在new一个对象时,后面的 <> 里面可以不用写东西
-
如果没有指定泛型,默认是 Object
-
使用泛型的数组不能初始化
-
静态方法不能使用类的泛型
-
泛型接口的类型,在继承接口或者实现接口时确定,没指定则时Object
- 在接口中,所有的成员都是静态性质,故不能对成员使用泛型
-
泛型方法
-
修饰符 <T,R…> 返回类型 方法名(参数列表) {}
-
public <T, R> void eat(T t, R r) {}
-
-
只有当泛型方法被调用时,类型才会确定
-
public void eat(E e) {} ,方法不是泛型方法,而是使用了泛型
-
-
泛型不具备继承性
-
List<Object> list = new ArrayList<String>(); // 报错
-
-
通配符
- <?> : 支持任意泛型
- <? extends A>:支持A类以及A类的子类,即规定了泛型的上限
- <? super A>:支持A类以及A类的父类,不限于直接父类,即规定了泛型的下限
JUnit
Java语言的单元测试框架
多数Java的开发环境都已经集成了JUnit作为单元测试的工具
使用
- 在需要测试的方法上添加@Test,并按 Alt+enter 引入相应的5.7版本的包
代码
package com.xiaolu.generic;
import org.junit.jupiter.api.Test;
/**
* @author 林小鹿
* @version 1.0
*/
public class JUnit_ {
public static void main(String[] args) {
// 传统方法
// new JUnit_().m1();
// new JUnit_().m2();
}
@Test
public void m1() {
System.out.println("test1");
}
@Test
public void m2() {
System.out.println("test2");
}
}