泛型详细讲解~

泛型相当守门员,在编译时检查类型是否正确,避免出现类型转化异常。

  1. 包装类
  2. 问题的引入
  3. 泛型介绍
  4. 泛型类
  5. 泛型方法
  6. 泛型接口
  7. 通配符
  8. 类型擦除
    包装类(将基本数据类型封装到类中)
    (1) Object可以接受所有类,但是出国八大基本数据类型,此时只要将这八大基本数据类型封装成类即可。
    a. 对象型包装类:Object直接子类。Character、Boolean
    b. 数据型包装类:Number直接子类。Byte、Short、Integer、Long、Float、Double
    (2)装箱:将基本类型封装到类中(向上转型,可以让Object接受)。Integer i = new Integer(10);
    (3) 拆箱:将包装类的对象还原为基本类型(为了基本类型的数值运算,将类转为数值) 。int data = test.intvalue();在这里插入图片描述
    (4) 自动拆装箱:
    在这里插入图片描述
    (5)阿里编码规范:所有类中的属性同义使用包装类。Integer默认值是null;int默认值是0;
    问题的引入

public class Point {
    private Object x;
    private Object y;
    public Point(Object x,Object y){
        this.x = x;
        this.y = y;
    }

    public Object getX() {
        return x;
    }

    public void setX(Object x) {
        this.x = x;
    }

    public Object getY() {
        return y;
    }

    public void setY(Object y) {
        this.y = y;
    }

    public static void main(String[] args) {
        Point point = new Point(10,10);
        //此时该句型里面隐藏了一个自动拆箱
        int x = (int) point.getX();
        int y = (int) point.getY();
        System.out.println("x = " + x + ",y = " + y );
        
    }
}

此时要是 Point point = new Point(10,10);变为 Point point = new Point(10,“东京20度”);编译时类型转化出现异常。泛型由此而产生。

泛型
泛型指的就是在类定义的时候并不会设置类中的属性或方法中的参数的具体类型,而是在类使用时再进
行定义。
泛型类
泛型类基本语法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
泛型方法
泛型方法基本语法:
在这里插入图片描述
泛型方法与泛型类稍有不同的地方是,类型参数也就是尖括号那一部分是写在返回值前面的。 中的T 被称为类型参数,而方法中的 T 被称为参数化类型,它不是运行时真正的参数。
在这里插入图片描述
在这里插入图片描述
泛型方法与泛型类可以共存,如下所示:
在这里插入图片描述
上面代码中,MyClass 是泛型类,testMethod1 是泛型类中的普通方法,而 testMethod2 是一个泛型方法。而泛型类中的类型参数与泛型方法中的类型参数是没有相应的联系的,泛型方法始终以自己定义的类型参数为准。

泛型接口
泛型接口基本语法:
在这里插入图片描述
对于这个接口的实现子类有两种做法
(1)在子类定义时继续使用泛型
在这里插入图片描述
(2)在子类实现接口的时候明确给出具体类型
在这里插入图片描述
一旦给出了具体类型,子类就不再是泛型。
通配符
(1)用在方法的声明上,方法参数
(2)为什么引用通配符
在这里插入图片描述
以上程序会带来新的问题,如果现在泛型的类型设置的不是String,而是Integer.
我们需要的解决方案:可以接收所有的泛型类型,但是又不能够让用户随意修改。这种情况就需要使用 通配符"?"来处理
在这里插入图片描述

(3)在"?"的基础上又产生了两个子通配符:
? extends 类(设置泛型上限)和? super 类(设置泛型下限)
a.泛型上限:
在这里插入图片描述

b.泛型下限:
在这里插入图片描述
上限可以用在方法、接口的泛型声明,不能修改;而下限只能用在方法参数,可以修改内容!
类型擦除
类型擦除:泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉。
在这里插入图片描述
打印的结果为 true 是因为 MyClass 和 MyClass 在 JVM 中的 Class 都是MyClass.class 。
在这里插入图片描述
在泛型类被类型擦除的时候,之前泛型类中的类型参数部分如果没有指定上限,如 则会被转译成普
通的 Object 类型,如果指定了上限如 则类型参数就被替换成类型上限。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值