java——泛型

本文介绍了Java泛型的出现原因,旨在解决集合操作中可能出现的类型安全问题和转型异常。泛型通过类型参数化实现了编译期的类型检查,提高了代码的可读性和安全性。此外,还详细阐述了泛型类的定义以及泛型通配符的使用,包括类型通配符“?”、类型上限和下限。最后,讨论了泛型擦除的概念,即编译后的泛型信息会被擦除,运行时与普通类无异。
摘要由CSDN通过智能技术生成

 1为什么会有泛型的出现?

当创建一个Collection集合对象时,指向new ArrayList(),父类指向子类

Collection e=new ArrayList();

此时对象e的类型不明确,默认为Object类型,在需要时向下转型,可能会出现转型异常,这时虽然可以通过instenceof关键字处理这类问题,但是在有需要的情况下会出现多种转型异常,这时就会造成麻烦,因此出现了泛型的需求。

Collection g=new ArrayList();
        for (Object obj:g) {
            if(obj instanceof String){
                String s=(String)obj;
            }
        }

此上就是用Instenceof处理转型异常的过程。

2.泛型的特点

泛型中必须是引用类型,基本类型会被自动装箱为包装类型

应用案例为:

Collection<String> e=new ArrayList<String>();

泛型实质上是类型参数化,参数只能是类类型,且可以是多个类类型

3.泛型类

定义一个泛型类

public class Dome<T> {
    T name;
}

编译期间,如果父类传入的类型不明确,那么子类也应该定义为泛型类

public class DomeChild<T> extends Dome<T>{
    //如果父类传入的类型不明确时,子那么类也是泛型类,二者传入的参数要一致
}

如果父类传入的类型已经确定,则子类无需定义为泛型类,因为子类不是泛型类时,创建子类对象时不能传入类型

public class DomeChild extends Dome<String>{
    //如果父类传入的类型已经明确,那么子类无需定义为泛型类
}

4.泛型通配符

4.1类型通配符 “?”

可表示具体的类型实参,且只能在方法中的参数列表展示

4.2泛型类型上限   <?extends Number>

可传入的类型为Number以及Number类型的子类

public class DomeA<T> {

    public static void main(String[] args) {
        DomeA<Integer> o=new DomeA<>();
        DomeA<Number> i=new DomeA<>();
        o.method(o);
        o.method2(i);

    }
    public void method(DomeA<?extends Number> db){
        System.out.println("213561");
    }

4.3泛型类型下限

可传入的类型为Number以及Number类型的父类

public class DomeA<T> {

    public static void main(String[] args) {
        DomeA<Integer> o=new DomeA<>();
        DomeA<Number> i=new DomeA<>();
        o.method(o);
        o.method2(i);

    }
    public void method(DomeA<?super Number> db){
        System.out.println("213561");
    }

5.泛型擦除

泛型是java1.5之后的语法,以前的版本并不支持,所以底层使用的还是Object类;泛型信息只存在在编译阶段,在进入JVM之前,与泛型的相关信息将会被擦除,因此在java虚拟机里泛型类与普通类并没有什么区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值