回顾总结14

泛型

之前存在的问题

  1. 不能对加入到集合ArrayList中的数据类型进行约束(不安全)
  2. 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响。
  3. 集合中是可以加入所有Object类型的元素的,不好统一管理,调用方法。

优点

  1. 编译时,检查添加的元素,提高了安全性
  2. 减少了类型转换的次数,提高了效率
  3. 不再提示编译警告

含义

泛型可看做广泛类型,可以代表一类对象

  1. 泛型又称参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题

  2. 在类声明或实例化时只要指定好需要的具体的类型即可

  3. Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮

  4. 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或是某个方法的返回值的类型,或者是参数类型

    //E具体的数据类型在定义的Person对象的时候指定,即在编译期间,就确定E是什么类型
    Person<String> person = new Person<String>();
    
    class Person<E>{
        E s;//表示s的数据类型,该数据在定义Person对象的时候指定
        public Person(E s){//E也可以是参数类型
            this.s = s;
        }
        public E f(){//E也可以是返回值类型
            return s;
        }
    }
    //当新建对象的时候,可以传进去E的具体类型
    //比如String,E和String的关系类似,形参和实参。
    

details

  1. 泛型存放的只能是引用类型,不能是基本数据类型
  2. 指定泛型具体类型后,可以传入子类或者实现类。多态的用法。
  3. 泛型使用形式
    • List list = new ArrayList();
    • List list = new ArrayList<>();简写推荐
  4. 默认是使用了Object的泛型的

自定义泛型

基本语法

class 类名<T,R...>{}

detials

  1. 普通成员可以使用泛型(属性、方法)
  2. 使用泛型的数组,不能初始化
  3. 静态方法中不能使用类的泛型
  4. 泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)
  5. 如果在创建对象时,没有指定类型,默认为Object
class Tiger<T,R,M>{
    String name;
    R r;//属性使用泛型
    M m;
    T t;
    public Tiger(String name,R r,M m,T t){
        //构造器使用泛型
        this.name = name;
        this.r = r;
        this.m = m;
        this.t = t;
    }
    public R setR(){//方法使用泛型
        
    }
}

自定义泛型类

  1. T,R,M泛型的标识符,一般是单个大写字母

  2. 泛型标识符可以有多个

  3. 普通成员可以使用泛型(属性、方法)

  4. 使用泛型的数组,不能初始化

    泛型是在创建对象时给予,初始化是在类的加载时开辟空间(不确定空间的大小)

  5. 静态方法中不能使用类的泛型

    泛型是在创建对象时给予,静态成员(属性、方法)是在类的加载时确定,给予空间,初始化

自定义泛型接口

接口的属性都是静态的。不能在接口里定义泛型属性

使用到了泛型,但是没有指定泛型种类的,会默认有Object,但是不易于阅读,所以不建议省略

自定义泛型方法

修饰符<T,R...>返回类型 方法名(参数列表){}

details

  1. 泛型方法,可以定义在普通类中,也可以定义在泛型类中
  2. 当泛型方法被调用时,类型会确定
  3. public void eat(E e){}修饰符后没有<T,R...>eat方法不是泛型方法,而是使用了泛型(泛型是不能凭空使用的,方法没有定义泛型,只能使用类的泛型)

继承和通配符

  1. 泛型不具备多态。不能定义父类,传递子类
  2. :支持任意泛型
  3. :支持A类以及A类的子类,规定了泛型的上限
  4. :支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

JUnit

Java语言的单元测试框架

多出Java的开发环境都已经继承了JUnit作为单元测试的工具

posted @ 2021-08-10 16:04  灰线  阅读(38)  评论(0)    收藏  举报