泛型-不同于Object的泛泛之型

泛型是Java中提高代码复用性和类型安全性的重要特性,允许方法或类处理多种数据类型。它遵循数据类型一致化原则,以T,K,V等作为占位符表示不同类型的参数和返回值。泛型可用于方法和类的增强,如在类实例化时需指定具体类型。在接口中,泛型只应用于成员方法。使用泛型时,应避免数据类型选择模糊,确保一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型的强大之处在于它可以让一个方法,或者一个类,让多种数据类型通用,大大提高了代码的可复用性

泛型的特点

  1. 支持数据类型的多样化 自由

  1. 同时严格遵从数据类型的一致化要求 但不失约束

  1. 泛型的核心是对方法进行增强

泛型的格式

<大写的单个英文字母无意义占位符> 可以使 A B C D任何一个,但通常使用

T Type     类型
K Key      键
V Value    值
E Element  元素
R Return   返回值

泛型一般用于返回值和参数的增强(扩大方法或类使用范围)

泛型的使用

泛型对单一方法增强

语法格式:

权限修饰符 [static] <自定义泛型占位符> 返回值 方法名(形式参数列表) {
 方法体;
}

注意:在形式参数列表内必须有一个和自定义泛型所对应,用来明确泛型的具体类型,这个类型需要在调用方法时明确的传入进来

☆返回值可以是泛型

小思考:

 public <T> T test(T t1,T t2) {
       System.out.println("这里是t1" + t1);
       System.out.println("这里是t2" + t2);
        return t1;
}

test(1, "字符串1");

这时T是什么类型的呢?

传入了Integer和String类型,返回值是什么类型呢?

PS:java泛型会把传入的参数默认为包装类,Integer,Float,Double等
 Object obj = test(1, "字符串1");

为什么是Object类,Object类是所有类的父类,在你对同一个类的同一种泛型传入两个类型参数,这时jvm蒙了,把T当Integer不合适,当String也不合适,那就给你们一个你们的共同父类Object。但这种情况对于我们开发来说并不是好事,我们在开发时想要给他我们规定的类型的同时还想要他返回我们想要的具体的类型,所以在使用泛型时要遵守【数据类型一致化】原则

泛型对整体方法增强

a. 泛型对类的增强

class 类名<自定义泛型占位符> {
 ☆成员方法可以使用自定义泛型
}

类带有泛型时,需要对泛型实例化并且确定泛型具体类型才能使用

对带有泛型的类的实例化

// IDEA 写法
类名<具体数据类型> 类对象 = new 类名<>();

// Eclipse 写法
类名<具体数据类型> 类对象 = new 类名<具体数据类型>();

b.泛型对接口的增强

interface 接口名<自定义泛型占位符> { }
注意:接口中的成员变量无法使用自定义泛型,因为缺省属性为 public static final ,定义时需要初始化。无法对于

接口声明泛型有且只用于成员方法。

1. 缺省属性为 public abstract 方法可以使用自定义泛型

2. default 默认方法也可以使用自定义泛型

实现类实现接口的方式有两种模式

1.约束模式:在Implements时,实现类直接给泛型固定的类型

class TypeB implements A<String> {
        方法一。。。
        方法二。。。
}

2.自由模式:在Implements时,也给一个泛型

class TypeC<T> implements A<T> {
        方法一
        方法二
}

通过实例化对象来给泛型

PS:要时刻注意泛型是否遵守了【数据类型一致化】原则,不要出现数据类型选择模糊的情况

如有不足,私信或者评论指正,肥肠感激。🙋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值