纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

java伪泛型的介绍 java伪泛型知识点详解

小妮浅浅   2021-06-23 我要评论
想了解java伪泛型知识点详解的相关内容吗小妮浅浅在本文为您仔细讲解java伪泛型的介绍的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java,伪泛型下面大家一起来学习吧

说明

1、Java中的泛型是伪泛型这种泛型实现方法称为类型擦除 基于这种方法实现的泛型称为伪泛型

2、由于Java的泛型只在编译阶段发挥作用因此在写代码时起到了检查的作用当代码运行时它的内部并没有泛型

实例

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); //true

结果为 trueList<String> 和 List<Integer> 在 jvm 中的Class都是List.class即泛型信息被擦除了

基础知识点扩充:

泛型的基本概念

泛型的定义:泛型是JDK 1.5的一项新特性它的本质是参数化类型(Parameterized Type)的应用也就是说所操作的数据类型被指定为一个参数在用到的时候在指定具体的类型这种参数类型可以用在类、接口和方法的创建中分别称为泛型类、泛型接口和泛型方法

泛型思想早在C++语言的模板(Templates)中就开始生根发芽在Java语言处于还没有出现泛型的版本时只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化例如在哈希表的存取中JDK 1.5之前使用HashMap的get()方法返回值就是一个Object对象由于Java语言里面所有的类型都继承于java.lang.Object那Object转型为任何对象成都是有可能的但是也因为有无限的可能性就只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象在编译期间编译器无法检查这个Object的强制转型是否成功如果仅仅依赖程序员去保障这项操作的正确性许多ClassCastException的风险就会被转嫁到程序运行期之中

泛型技术在C#和Java之中的使用方式看似相同但实现上却有着根本性的分歧C#里面泛型无论在程序源码中、编译后的IL中(Intermediate Language中间语言这时候泛型是一个占位符)或是运行期的CLR中都是切实存在的List<int>与List<String>就是两个不同的类型它们在系统运行期生成有自己的虚方法表和类型数据这种实现称为类型膨胀基于这种方法实现的泛型被称为真实泛型

Java语言中的泛型则不一样它只在程序源码中存在在编译后的字节码文件中就已经被替换为原来的原始类型(Raw Type也称为裸类型)了并且在相应的地方插入了强制转型代码因此对于运行期的Java语言来说ArrayList<int>与ArrayList<String>就是同一个类所以说泛型技术实际上是Java语言的一颗语法糖Java语言中的泛型实现方法称为类型擦除基于这种方法实现的泛型被称为伪泛型(类型擦除在后面在学习)
使用泛型机制编写的程序代码要比那些杂乱的使用Object变量然后再进行强制类型转换的代码具有更好的安全性和可读性泛型对于集合类来说尤其有用

泛型程序设计(Generic Programming)意味着编写的代码可以被很多不同类型的对象所重用


相关文章

猜您喜欢

  • Java8 CompletableFuture 异步执行 Java8 CompletableFuture 异步执行操作

    想了解Java8 CompletableFuture 异步执行操作的相关内容吗ACGkaka_在本文为您仔细讲解Java8 CompletableFuture 异步执行的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java8,CompletableFuture,异步执行,Java8,CompletableFuture下面大家一起来学习吧..
  • spring学习总结 spring框架学习总结

    想了解spring框架学习总结的相关内容吗我实在是想不出什么好听的昵称了啊在本文为您仔细讲解spring学习总结的相关知识和一些Code实例欢迎阅读和指正我们先划重点:spring框架,学习总结下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式