泛型

解决程序参数转换问题
解决向下转型出现的安全隐患

指的是类定义的时候不会设置属性或方法参数的具体类型,而是使用时定义。

泛型类定义:

class MyClass<T> {//T:类型参数,可以指代任何引用类型(基本类型无法取代)
        T value1;//T代表任意类型
    }

引入泛型的作用:
1、用于检测编译期,参数类型设置问题,只有传入参数与使用定义类型一致时才可设置;
2、杜绝(取消)向下转型带来的隐患。
泛型方法:

public <T> T test(T t){
            return t;
        }
    <T>:类型参数,不能省略,写在返回值(类型为T)之前

如果泛型类与泛型方法共存,使用同一个类型参数,【泛型类T】与【泛型方法T】没有任何联系,
泛型方法始终以自己定义的类型参数为准。
建议使用不同的标识。

通配符(3个):

    ?用于方法参数,指代任意类型
fun(MyClass<?> myclass):表示可以接收任意类型的MyClass对象

            只能取得值(get)而不能修改(set),类型无法确定
extends 类:设置泛型上限,【可用于类或方法参数】
            ?extends Number:表示只能是Number或其子类

            用于方法参数时,只能取得值(get)而不能修改(set),类型无法确定
?super 类:设置类型下限,【只能用于方法参数】
            ?super String:表示只能设置String或其父类(Object)

            用于方法参数时,可以修改值,若此时?为其父类,会默认发生向上转型,类型已确定

泛型接口

    接口定义上使用此占位符表示泛型接口

    子类实现接口
        1、继续保留泛型
            class MyClassImpl implements MyClass<T>
        2、声明泛型类型
            class MyClassImpl implements MyClass<String>

类型擦除

    泛型信息只存在于代码编译阶段,进入JVM之前,与泛型相关的信息会被擦除掉

    泛型类与普通类在JVM中没有任何区别

    泛型、自动拆装箱、foreach都是Java中语法糖(方便开发者开发,,只存在于编译阶段,在运行阶段无用)

    在泛型类被擦除时,之前泛型类中的参数如果没有指定上限,T->Object
    若指定上限,T->类型上限       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值