2021.2.20 泛型的理解(个人感悟,通俗易懂,复习为主)

本文深入探讨了Java泛型的使用,包括泛型类、泛型接口、泛型方法、可变参数和通配符的运用。泛型的主要优点在于提高代码复用性和自动类型转换,减少强制类型转换的需要。同时,文章指出泛型仅在编译时有效,运行时则不存在。通配符和上下限限定进一步增加了泛型的灵活性。通过实例解析,帮助开发者更好地理解和应用泛型。
摘要由CSDN通过智能技术生成

关于泛型的使用和理解

一.为什么用

主要原因就是因为调用类,方法的时候 你可以使用任意数据类型(强调一下除了基本数据类型之外的),这样一个是代码复用性特高,防止你类型定死了,后面想变就麻烦,还有就是利用泛型可以自动进行数据类型转换,你定义完泛型类或者泛型方法后,你实现的时候把你需要的类型直接敲上去就行,比如String,Integer这样,然后就完事了,编译会自动给你转,不用你考虑乱七八糟的。当然如果你没定义类型,那默认就是转成Object类型,这块强调一下泛型只是在编译时有用,JVM虚拟机运行时没有泛型这概念。说白了这玩意就是让程序员舒服点的。

二.用法

一个个来。
一.泛型类

public class FanxingFangfa<T> {
	T flag;
	public void setflag(T flag) {
		this.flag=flag;
		System.out.println(flag);
	}
	public T getflag() {
		return this.flag;
	}
}

在类名后加尖括号T,代表泛型哦,然后你其中的变量,方法的参数,方法的返回类型(当然无返回类型还是void),都用T表示。这就是个泛型方法。创建对象时声明类型就好。然后声明啥类型就转成啥类型。

FanxingFangfa<String> fxff=new FanxingFangfa<>();

二.泛型接口
跟上面差不多,代码就不展现了。需要注意的点1.实现泛型接口的类要定义类型,比如接口用的泛型,你实现类中要告诉我们是啥类型(必须的),这样的话用实现类创建对象的时候 你就不用跟上面那样声明类型2.如果你用泛型接口创建对象,那么你还给跟上面一样声明一下子类型。
三.泛型方法

public<T> void setFlag(T name){}

上面就是个泛型方法,核心就是public 后面加个尖括号T。然后如果你有返回值类型,就把void替换成T,跟前面差不多。用的时候自动识别类型,自动转换。比如下面的Integer和String 伪代码如下。

Myname mn=new Myname();
mn.setFlag(123);
mn.setFlag("ranran");

当然静态方法也成,就是在public static 后面加尖括号T就行,别问为什么非这么固定public,就是因为我喜欢公开嘿嘿。重点来了,你会发现一般方法既可以用泛型类,也可以用泛型方法,都ok呀。但是静态方法不一样,它无法访问类定义的泛型,只能用把泛型定义在方法上。不信你试试!
四.可变参数
反正可变参数 就是传来个数组嘛相当于,数量不确定,给你用的时候才知道。其实跟泛型没啥关系,就是加个泛型意思现在不光数量不确定了,我连类型都不确定嘿嘿,气人不。直接上代码,一看就懂。

public<T> void method(T...args){
	for(T t:args)
	{
	System.out.println(t)}
}

五.通配符
?就是类型通配符,不知道定义什么泛型能还,然后我别的类可能还给使用这个泛型类,就用上了,伪代码如下

我这有个泛型类
class Fanxing<T>{}
我这还有个一般类
class Test{
public void UseFanxing(Fanxing(?)fanxing){}
}
这块如果你把?换成具体的类型,那么使用Test类的这个方法时
只支持这个类型,其他类型会报错。

六.上下限限定
很简单,上限限定是限定类型可以是自己或者子类(接口当然也是),下限限定是限定类型可以是自己或者父类。伪代码如下

<? extends Number>extends上限限定 
<? super Integer>super下限限定

如果单看不理解 就放到第五点的代码,把?替换成上面代码,就懂了。这块注意的是,上限限定还适用于泛型类,也就是第一点那块,而下限限定不使用。

总结

泛型就在编译时有用,所以它的出现是为了帮我们的,省的我们来回转类型,考虑用什么类型等等,也就是说学这个不用感觉是累赘,这就好比耕地,现在你自己种,学了这个,等于白给你一头牛,回头你耕地更快了,那你不爽么? 以上纯属个人对泛型的理解,比较通俗,应该是很好明白的,可能会有细节的问题,望批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值