泛型
2019-11-17 09:21:11来源:博客园 阅读 ()
泛型
概念:泛型,即“参数化类型”。就是将原来具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
本质:为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
三种使用方式:泛型类、泛型接口、泛型方法
类型通配符:
1)类型通配符一般是使用?代替具体的类型参数。例如List<?> 在逻辑上是List<String>,List<Integer>等所有List<具体类型实参>的父类。
2)类型通配符上线通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。
泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整数数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用Java泛型。
1.泛型方法 <E>
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
1 // 泛型方法 printArray
2 public static < E > void printArray( E[] inputArray )
3 {
4 for ( E element : inputArray ){
5 System.out.printf( "%s ", element );
6 }
7 }
1)<?extend T> 表示该通配符所代表的类型是T类型的子类。
2)<? super T> 表示该通配符所代表的类型是T类型的父类。
2.泛型类 <T>
泛型类的声明和非泛型类的声明类似,除了在类名后面添加类型参数声明部分。和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为它们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。
1 public class Box<T> {
2 private T t;
3 public void add(T t) {
4 this.t = t;
5 }
6 public T get() {
7 return t;
8 }
3.类型擦除
Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型时加上的类型参数,会被编译器在编译时去掉,这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在编译之后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说时不可见的。类型擦除的基本过程也比较简单,首次是找到用来替换类型参数的具体类,这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界,把代码中的类型参数都替换成具体类。
原文链接:https://www.cnblogs.com/HuiH/p/11876961.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java笔记:数组,异常,泛型 2020-06-08
- JAVA自定义注解 2020-06-01
- DDD之2领域概念 2020-05-30
- 【JavaSE】泛型知识点(总结) 2020-05-25
- 如何实现JDK10的新特性:var泛型和多个接口,案例详解 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash