Java 泛型

Posted 环游世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 泛型相关的知识,希望对你有一定的参考价值。

 

一、什么是泛型

  泛型是Java SE 1.5增加的特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

 

二、泛型的作用

  Java引入泛型的目的是为了类型安全。泛型可以将运行时的错误提前到编译时的错误。

  Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)。

 

三、泛型的定义

  1、修饰类或接口,放在类或接口名后面

    public class TestClassDefine<T, S extends T>{}

  2、修饰方法,放在作用域限定符(public、private等)后面

    public <T, S extends T> T testGenericMethodDefine(T t, S s){}

 

四、泛型的特点

  1、使用泛型T,因为不知道T的具体类型,也就不知道T中包含什么属性和方法,也就不能在定义泛型类、接口、方法的时候调用T的属性和方法等信息。

  2、泛型可以使用继承等修饰符:<T, S extends T> 、<T extends Collection>等

  3、可以使用通配符<? extends ClassName>

    • 在使用泛型类、接口、方法时,如果不知道要传入什么类型的值时,可以使用<? extends ClassName>,表示ClassName对应的子类都可以。
    • 也可以直接使用<?>,表示<? extends Object>。
    • 当然,使用了通配符后,在使用?表示的成员时,因为不知道是哪个类,所以可以调用的属性或方法会受到相应的限制。

 

以上是关于Java 泛型的主要内容,如果未能解决你的问题,请参考以下文章

java泛型泛型的内部原理:类型擦除以及类型擦除带来的问题

Java 泛型泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )

java中的泛型

Java基础总结三(泛型异常)

Java基础总结三(泛型异常)

Java基础总结三(泛型异常)