泛型类--实现

这篇博客介绍了Java中的泛型类概念及其使用方法,通过自定义泛型分页实体类`Page`和学生实体类`Student`展示了泛型在类和方法中的应用。在测试代码中,创建了`Page`和`Page`实例,显示了泛型在存储不同类型数据时的灵活性。
摘要由CSDN通过智能技术生成

泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。
一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

/**
 * 自定义泛型分页实体类
 */
public class Page<T> {
    //每页显示个数
    private int pageSize;
    //当前页码
    private int pageIndex;
    //总页码
    private int totalPage;
    //总记录数
    private int totalCount;
    //当前页数据
    private List<T> rows;

    public Page() {}

    public Page(int pageSize, int pageIndex, int totalPage, int totalCount, List<T> rows) {
        this.pageSize = pageSize;
        this.pageIndex = pageIndex;
        this.totalPage = totalPage;
        this.totalCount = totalCount;
        this.rows = rows;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public List<T> getRows() {
        return rows;
    }

    public void setRows(List<T> rows) {
        this.rows = rows;
    }

    @Override
    public String toString() {
        return "Page{" +
                "pageSize=" + pageSize +
                ", pageIndex=" + pageIndex +
                ", totalPage=" + totalPage +
                ", totalCount=" + totalCount +
                ", rows=" + rows +
                '}';
    }
}
/**
 * 学生实体类
 */
public class Student {

    private String name;
    private String address;

    public Student() {
    }

    public Student(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

}
/**
     * 泛型类测试
     */
    @Test
    public void test1() {
        //如果定义了泛型类,实例化时没有指定泛型类的类型,则认为此泛型类型为Object。
        //如果定义了泛型类,建议在实例化时,指定泛型类的类型。
        List<String> names = new ArrayList<>();
        names.add("李四");
        names.add("张三");
        Page<String> page = new Page<>(10, 1, 100, 1000, names);
        System.out.println(page);

        List<Student> students = new ArrayList<>();
        students.add(new Student("张三", "上海"));
        students.add(new Student("李四", "北京"));
        students.add(new Student("王武", "南京"));
        Page<Student> page1 = new Page<>(10, 1, 100, 1000, students);
        System.out.println(page1);
    }

测试结果

Page{pageSize=10, pageIndex=1, totalPage=100, totalCount=1000, rows=[李四, 张三]}
Page{pageSize=10, pageIndex=1, totalPage=100, totalCount=1000, rows=[Student{name='张三', address='上海'}, Student{name='李四', address='北京'}, Student{name='王武', address='南京'}]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值