泛型】JAVA泛型有什么作用?泛型是实泛型还是伪泛型?_第2页回答

2021-01-18 19:16发布

13条回答

泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型的提出是为了编写重用性更好的代码。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

清屿
3楼 · 2021-01-20 11:14

“泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型的提出是为了编写重用性更好的代码。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

帅帅马
4楼 · 2021-01-20 14:09

一、什么是泛型

“泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型的提出是为了编写重用性更好的代码。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

二、为什么引入泛型

在引入泛型之前,要想实现一个通用的、可以处理不同类型的方法,你需要使用 Object 作为属性和方法参数

三、泛型的使用方式

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

类型参数的意义是告诉编译器这个集合中要存放实例的类型,从而在添加其他类型时做出提示,在编译时就为类型安全做了保证。

参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。



纪宇轩
5楼 · 2021-01-20 18:05

1、什么是泛型?

泛型是JDK1.5的一项新增特性,本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数。泛型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。

2、为什么要使用泛型

  1. 如果没有使用泛型,而是使用Object,那么只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化。

  2. 同时,使用Object就有可能转型成任何对象,因此,只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象。

  3. 在编译期间,编译器无法检查这个Object的强制转型是否成功,只通过程序员来保障这项操作的正确性,许多ClassCastException(类型转换错误)的风险就有可能在运行期发生。

3、什么是真实泛型?什么是伪泛型?Java中的泛型是真实泛型还是伪泛型?

  • 真实泛型:泛型无论在源码、编译后还是运行期都是真实存在,例如List和List就是两个不同的类型,它们在系统运行期生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型称为真实泛型。C#中的泛型就是真实泛型。

  • 伪泛型:Java中的泛型是伪泛型。泛型只在源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型(Raw Type,也称裸类型)了,并且在相应的地方插入了强制转型代码。因此,在Java程序的运行期中,ArrayList和ArrayList就是同一个类。这种泛型实现方法称为类型擦除 ,基于这种方法实现的泛型称为伪泛型


灰机带翅膀
6楼 · 2021-01-22 15:08
  1. 1、为什么要使用泛型

1、如果没有使用泛型,而是使用Object,那么只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化。

2、同时,使用Object就有可能转型成任何对象,因此,只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象。

3、在编译期间,编译器无法检查这个Object的强制转型是否成功,只通过程序员来保障这项操作的正确性,许多ClassCastException(类型转换错误)的风险就有可能在运行期发生。

2、什么是真实泛型?什么是伪泛型?Java中的泛型是真实泛型还是伪泛型?

1、真实泛型:泛型无论在源码、编译后还是运行期都是真实存在,例如List和List就是两个不同的类型,它们在系统运行期生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型称为真实泛型。C#中的泛型就是真实泛型。

2、伪泛型:Java中的泛型是伪泛型。泛型只在源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型(Raw Type,也称裸类型)了,并且在相应的地方插入了强制转型代码。因此,在Java程序的运行期中,ArrayList和ArrayList就是同一个类。这种泛型实现方法称为类型擦除 ,基于这种方法实现的泛型称为伪泛型


相关问题推荐

    没有解决我的问题,去提问