码迷,mamicode.com
首页 > 编程语言 > 详细

Java泛型

时间:2020-02-22 11:57:59      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:java   多态性   访问权限   extend   generic   变量   对象数组   分包   表示   

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泛型

标签:java   多态性   访问权限   extend   generic   变量   对象数组   分包   表示   

原文地址:https://www.cnblogs.com/miniSimple/p/12344600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!