Java泛型

Posted 今天有你便安好

tags:

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

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

eg:
假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?
答案是可以使用 Java 泛型。
使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。


泛型方法
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

下面是定义泛型方法的规则:
1、所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
2、每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
3、类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
4、泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)

泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

类型通配符
在泛型操作中也可以通过通配符接收任意指定泛型类型的对象。
1、匹配任意类型的通配符(?)
Info<?> i = new Info(String)(); //使用?接收泛型对象
2、受限泛型
设置上限://范围上限使用extends关键字声明,表示泛型的类型可能是所指定的类型或者是此类型的子类

        // 只能接收Number及其Number的子类 
        声明对象: 类名称<? extends 类> 对象名称 ---> Info<? extends Number> i;    

        // 此处泛型只能是数字类型
        声明类:[访问权限] 类名称 <泛型标识 extends 类>{} ---> public Info<T extends Number>{}  

    设置下限://范围下限使用super进行声明,表示泛型的类型可能是所指定的类型,或者是此类型的父类型,或是Object类

        // 只能接收Number或Object类型的泛型,Number类的父类只有Object类
        声明对象:类名称<? super 类> 对象名称 ---> Info<? super Number> i;   

        // 此处泛型只能是数字类型
        声明类:[访问权限] 类名称 <泛型标识 extends 类>{} ---> public Info<T extends Number>{}

解释:泛型与子类继承的限制。
  一个类的子类可以通过对象多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接收的。例如:Info不能使用Info

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

201621123062《java程序设计》第九周作业总结

什么意思 在HashMap之前 ? Java中的泛型[重复]

这个嵌套类构造函数片段可以应用于泛型类吗?

201621123037 《Java程序设计》第9周学习总结

Java——泛型

作业09-集合与泛型

(c)2006-2024 SYSTEM All Rights Reserved IT常识