0
点赞
收藏
分享

微信扫一扫

java基础 --泛型

简单聊育儿 2022-03-12 阅读 46

泛型

通俗解释:
一个房间,门口站个保安,有门票的进,没门票的不让进!
门票就是泛型对应的泛型实参和元素对应的数据类型要保持一致,保安就是java中的泛型机制

上代码:

        ArrayList arrayList = new ArrayList<>();
//        ArrayList<Object> arrayList = new ArrayList<>();
        arrayList.add("Hello");
        arrayList.add(123);

        for (Object obj : arrayList) {
            System.out.println((String) obj);
        }

结果:
在这里插入图片描述
以 List 集合为例,什么都可以往里面存储,然后统一被看成是Object类型,但是从List 集合中取值的话,就得用到强制类型转换,需要把 Object 类型转换成我们要的类型,程序繁琐且容易出错。

引入泛型
在这里插入图片描述
泛型作用

希望集合记住存入的数据是什么类型的,根据泛型参数做筛选,不是同类型的就不允许往一块放,可以避免ClassCastException 错误。
引入泛型后,所有元素都是同一类型,使用时就没必要做强制类型转换了

定义

参数化类型---- 将类型参数化,也就是说把我们要操作的类型作为了一个参数
泛型实参:< >中的是实际的类型参数,
在这里插入图片描述
泛型形参
在这里插入图片描述
泛型中就是使用大写的英文字母来作为类型形参,如图中的 E(原则上任何大写字母都可以)
常用的字母:
E 元素集合框架使用
K 键映射关系键的类型
V 值映射关系中值得类型
N 数字主要用于表示数字

泛型类的继承

在这里插入图片描述
继承时不能出现泛型形参,必须将泛型形参确定为相对应的泛型实参
在这里插入图片描述

集合之间没有继承关系,而泛型之间有继承关系的话,集合间的继承关系不成立

自定义泛型

自定义的泛型形参为T,定义一个对应泛型类型的t的私有属性,并设置相应的get()、set()方法。

    static class MyTest<T> {
        private T t;

        public T getT() {
            return t;
        }

        public void setT(T t) {
            this.t = t;
        }
    }

使用时赋予特定的泛型实参 String

        MyTest<String> test = new MyTest<>();
        test.setT("自定义的泛型");
        System.out.println(test.getT());

打印结果:
在这里插入图片描述

泛型方法

语法:

// 权限修饰符 <泛型形参T、E...> 返回值类型 方法名(形参列表){
//        方法体;
// }

举例:

public <T> void fanMethod(T t2) {
     System.out.println(t2.getClass().getName());
}

调用:

 test.fanMethod(9);
 test.fanMethod('a');
 test.fanMethod("hello");

运行结果:
在这里插入图片描述
注:

  1. 权限修饰符和返回值中间的泛型列表,即 < T > 很重要,是泛型方法的标志,有了这个才能叫做泛型方法
  2. < T >代表将使用泛型类型 T,只有这个时候,方法中才可以使用泛型类型T
  3. 泛型形参的命名,可以是 T,E,K 等等这些,是个大写的英文字母就行
举报

相关推荐

0 条评论