自定义泛型结构:泛型方法介绍
方法也可以被泛型化,不管此时定义在其中的类是不是泛型类。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。
泛型方法的格式:
[访问权限] <泛型> 返回类型 方法名([泛型标识参数名称]) 抛出的异常
如:public static <E> List<E> funcName(E[] arr) throws Exception{ }
一、泛型方法说明
泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。换句话说,泛型方法所属的类是不是泛型类都没有关系。
泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。
import java.util.ArrayList;
import java.util.List;
public class OrderTest<T> {
public static <E> List<E> copyFromArrayToList(E[] arr){
ArrayList<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}
}
public class GenericTest1 {
//测试泛型方法
@Test
public void test4(){
OrderTest<String> order = new OrderTest<>();
Integer[] arr = new Integer[]{1,2,3,4};
//泛型方法在调用时,指明泛型参数的类型。
List<Integer> list = order.copyFromArrayToList(arr);
System.out.println(list);
}
}
public class SubOrder extends OrderTest<Integer>{
//SubOrder:不是泛型类
public static <E> List<E> copyFromArrayToList(E[] arr){
//静态的泛型方法
ArrayList<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}
}
二、泛型类和泛型方法的使用情境
2.1、DAO类
import java.util.List;
public class DAO<T> { //表的共性操作的DAO
//添加一条记录
public void add(T t){
}
//删除一条记录
public boolean remove(int index){
return false;
}
//修改一条记录
public void update(int index,T t){
}
//查询一条记录
public T getIndex(int index){
return null;
}
//查询多条记录
public List<T> getForList(int index){
return null;
}
//泛型方法
//举例:获取表中一共有多少条记录?获取最大的员工入职时间?
public <E> E getValue(){
return null;
}
}
2.2、Customer 实体类
public class Customer { //此类对应数据库中的customers表
}
2.3、CustomerDAO类
public class CustomerDAO extends DAO<Customer>{//只能操作某一个表的DAO
}
2.4、DAOTest类
import org.junit.Test;
import java.util.List;
public class DAOTest {
@Test
public void test(){
CustomerDAO dao1 = new CustomerDAO();
dao1.add(new Customer());
List<Customer> list = dao1.getForList(10);
}
}