业务上遇到手动实现分页的需要
于是用最近学到的静态泛型方法实现了一个分页工具类,使用泛型类的初衷就是想让这个类更加具有通用性,不想将传入的List对象写死
首先我们来复习一下
什么是静态泛型方法
静态泛型方法实际就是 静态(static修饰)的泛型方法
什么是泛型方法?
泛型方法的声明语法类似于泛型类型的语法。类型参数部分由尖括号分隔并出现在方法的返回类型之前。如果有多个类型参数,则以逗号分隔。
不同于以往的方法,泛型方法的传入对象类型或者传出对象类型是不确定的,在调用该类时依据传入的类型从而确定
- 泛型方法语法结构
public static <T> void getName(T t){
}
public static <T> List<T> setName(T t){
}
public static <T> PageInfo<T> setName(T t){
}
...
接下来看我的实现
import com.github.pagehelper.PageInfo;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author NightFall
* @date 2023/02/20 17:01
*/
//工具类不能被初始化,所以要final修饰,符合规范
public final class PageInfoUtil {
//工具类不能被初始化,构造方法也要私有化
private PageInfoUtil() {
}
/**
* @description: 获取自定义分页对象
* @param list 想要转换为PageInfo对象的list
* @param pageNo 页码
* @param pageSize 页容量
* @return
* @throws
*/
public static <T> PageInfo<T> getPageInfo(List<T> list, Integer pageNo, Integer pageSize) {
PageInfo<T> pageInfo = new PageInfo<>();
pageInfo.setTotal(list.size());
pageInfo.setPageSize(pageSize);
pageInfo.setPageNum(pageNo);
pageInfo.setList((pageNo - 1) * pageSize >= list.size() ?
new ArrayList<>() : list.subList((pageNo - 1) * pageSize, Math.min(pageNo * pageSize, list.size())));
return pageInfo;
}
}
该类的功能很简单,传入的参数如下
参数 | 含义 |
---|---|
List<T> list | 想要进行分页的list对象 |
Integer pageNo | 想获取的页码 |
Integer pageSize | 页容量 |
(pageNo - 1) * pageSize >= list.size()
这是在判断,当前页数是否已经超过list总记录,如果超过就返回空List否则就正常截取相应条数的记录
list.subList((pageNo - 1) * pageSize, Math.min(pageNo * pageSize, list.size()))
这是在截取相应的记录,使用pageNo * pageSize和list.size()中最小的值做为终点索引,防止subList函数报错