章15——泛型generic

泛型的引入

泛型引入前后代码的比较

public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Dog("wang",10));
        arrayList.add(new Dog("xin",1));
        arrayList.add(new Dog("ran",5));

        //遍历
        for (Object o :arrayList) {
            //需要向下转型
            Dog dog = (Dog) o;
            System.out.println(dog.getName());
        }

        //表示存放到该集合中的元素只能是DOG类型或者其子类型
        //如果编译器发现不满足要求就会报错
        ArrayList<Dog> arrayList1 = new ArrayList<Dog>();
        arrayList1.add(new Dog("wang",10));
        arrayList1.add(new Dog("xin",1));
        arrayList1.add(new Dog("ran",5));

        //遍历时候可以直接取出DOG类型而非OBJECT
        //因为编译器明白,一定能取出DOG类
        for (Dog dog : arrayList1) {
            System.out.println(dog.getName());
        }


    }
}

泛型介绍
泛型是一种可以表示(接收)数据类型的数据类型。

class Person3<E>{
    //属性的类型是在创建或者定义PERSON时去指定一个
    //或者是某个方法的返回值类型,参数类型
    E s;
    public Person3(E s){
        this.s = s;
    }
    public E f(){
        return s;
    }

    public void t(){
        //此处的显示是变化的,E可以表示数据类型的一种
        System.out.println(s.getClass());
    }
}

泛型的语法

泛型的使用细节

自定义泛型
自己写了个类或者接口,然后自己规定泛型,C++中的模板。

静态方法是和对象没有关系的,所以无法判断泛型是什么类型。
所以静态数据成员和静态成员方法都不可以用泛型。
在类加载时对象还没有创建。
JVM无法完成初始化。

使用泛型的数组不可以初始化,如下:
及不可以直接实例化。

创建对象时不指定泛型类型是OK的,不一定非要<>才可以构建。但是此时所有泛型全都指定为OBJECT。

如上,接口中定义的成员不能使用泛型.

继承接口时:

当调用方法时,传入参数,编译器就会确定类型。(直接往里面传参数就OK了)
方法分为泛型方法(必须新自定义泛型),和仅仅使用了泛型的方法。

泛型的继承和通配符

图片中的第一条代码是不允许的,因为泛型不具有继承性。

通配符用于定义了泛型的类作为参数时,比如系统定义或者自定义,规定了接收使用了何种泛型的类,如下图:

JUNIT

在方法上方@Test alt + enter,一般是在JUNIT5.4

posted @   gknives  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示