Java-泛型

Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法
通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

🔎泛型的标志

class ExArray<T> {
    
}

在这里插入图片描述

红框代表占位符,表示当前类是一个泛型类
其中<>中的字母可以是任意的
<>中的字母个数可以是多个
在这里插入图片描述


🔎实例化泛型类

🌻<>中单个字母实例化

class ExArray<T> {

}

public class Test {
    public static void main(String[] args) {
        //ExArray exArray = new ExArray();

        //ExArray<Integer> exArray = new ExArray<Integer>();
        //后面<>中类型可以省略,如果写,必须与前面一致
        ExArray<Integer> exArray = new ExArray<>();
    }
}

<>中单个字母,定义成员变量的方式
在这里插入图片描述


🌻<>中多个字母实例化

class ExArray<T,P,X> {

}

public class Test {
    public static void main(String[] args) {
        ExArray<Integer,String,Character> exArray = new ExArray<>();
    }
}

在这里插入图片描述

<>中多个字母,定义成员变量的方式
在这里插入图片描述
红框位置虽然编译正确,但是只使用了一种类型,这样定义对于多种类型是不好的


🌼注意事项

<>中多个字母,不能进行方法的重载
这是因为Java的擦除机制
both methods hava same erasure——两种方法都有擦除

在这里插入图片描述
在这里插入图片描述


🔎擦除机制

在编译的过程当中,将所有的<>中的字母替换为Object这种机制,我们称为:擦除机制
Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息
也就是说,泛型只存在于编译时期,当程序运行时,泛型就被擦除为Object


🔎泛型的上界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束

🌻举例

class ExArray<T extends Number> {
    
}

在这里插入图片描述

表示只接受Number及Number的子类作为T的实参
如果未指定类型边界,可以理解为T extends Object


🔎泛型方法

class ExArray {
        public<T extends Number> T func(T data) {
            
            return data;
        }
    }

限定符 <类型形参列表> 返回值类型 方法名 形参
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值