自定义泛型结构:泛型方法介绍

2020-11-22 0 By admin

方法也可以被泛型化,不管此时定义在其中的类是不是泛型类。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。
泛型方法的格式:

[访问权限] <泛型> 返回类型  方法名([泛型标识参数名称]) 抛出的异常
如: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);
  }
}