今日分享开始啦,请大家多多指教~

泛型定义

示例:

泛型类

所谓的泛型类就是定义一个类时,为这个类中的变量,或者方法地形参指定一个通用的类型。

示例1:

定义一个类,给类中的变量定义类型,这里我们不知道变量是什么类型,所以可以使用泛型,这里用T表示,当然你用任何一个字母表示都可以。

创建User1对象时,我们可以传入想要的类型。例如:

示例2:

示例1中所有在参数都是一个类型,当然也可以指定不同的参数。

创建User2对象时,我们可以传入两个不同的类型。例如:

泛型方法

所谓的泛型方法就是方法的参数类型为一个泛型,分为普通的泛型方法和静态泛型方法。

普通的泛型方法

在定义普通的泛型方法有两种,一种是依赖于泛型类的传入的占位符,另一种是方法本身所持有的占位符。

示例:

在定义类时,给类中的方法形参指定类型。

调用时say1()必须与泛型类的传入的类型一样,say2()则不受限制。例如:

静态的泛型方法

静态的泛型方法不依赖于泛型类的占位符,本身持有一个占位符。

错误示例:

正确示例:

泛型接口

泛型接口跟泛型类差不多,在定义接口时,指定一个占位符。实现类中可以指定占位符类型,也可以不指定,不指定时默认为Object类型。

示例1:

如果实现类也不指定类型,也不使用默认的类型,那么就必须使用占位符,且和接口的占位符保持一致。

示例2:

泛型擦除

java类型通过编译生成字节码后,在反射的阶段会将类型中的泛型去掉,即所谓的泛型擦除,也就是说java中的泛型只存在于编码编译阶段,在运行期间泛型的类型会被擦除。这样做的目的是为了兼容jdk之前的版本。

示例:

通配符

泛型中也有继承,但其又区别于java中的继承。泛型中不认识java类中的泛型关系。所以这一块一定要注意。

示例1:

按照java的概念去理解,user31应该可以设置进去,但泛型实际上不支持。为了解决这个问题,就得使用通配符将java的中的继承关系重新绑定。通配符一般用?表示,可以理解为?是泛型中的父类。

示例2:

虽然编译能通过,但是意义不大,因为使用的是?,泛型中可以传入任何类型的值,我们的设计的想法是能传入Number的子类。所以这里就涉及到泛型的上边界和下边界的问题。

上边界(extends)

针对上面的?的问题,其实我们是想传Number的子类,因此在使用通配符的时候给他加一个限制。也就是说使用extends后,传入的类型值必须是某一个具体的类子类才可以。

示例:

上边界,一般作用于读取T类型数据的时候,相当于儿子无法更改老子的曾经。

下边界 (super)

搞懂了上边界,下边界就好理解了,泛型中只要是某一个具体类的父类就可以了。

示例:

下边界,一般作用于写入T类型数据的时候,相当于老子为儿子打天下。

更多资料,私信回复【1】……

今日份分享已结束,请大家多多包涵和指点!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月6日
下一篇 2021年5月6日

相关推荐