博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c 泛型与java泛型_C ++和Java中的“泛型”类型之间有什么区别?
阅读量:1540 次
发布时间:2019-04-21

本文共 1531 字,大约阅读时间需要 5 分钟。

小编典典

Java泛型是大量C ++模板不同。

基本上,在C 中,模板基本上是经过修饰的预处理器/宏集(注意:由于某些人似乎无法理解类推,因此我并不是说模板处理是宏)。在Java中,它们基本上是语法糖,可最大程度地减少对象的样板转换。这是C模板与Java泛型的相当不错的介绍。

要详细说明这一点:使用C ++模板时,基本上是在创建代码的另一个副本,就像使用#define宏一样。这使您可以执行诸如int在模板定义中使用参数来确定数组大小等操作。

Java不能那样工作。在Java中,所有对象都来自java.lang.Object,因此,泛型之前,您需要编写如下代码:

public class PhoneNumbers {

private Map phoneNumbers = new HashMap();

public String getPhoneNumber(String name) {

return (String)phoneNumbers.get(name);

}

...

}

因为所有Java集合类型都使用Object作为其基本类型,所以您可以在其中放置任何内容。Java 5推出并添加了泛型,因此您可以执行以下操作:

public class PhoneNumbers {

private Map phoneNumbers = new HashMap();

public String getPhoneNumber(String name) {

return phoneNumbers.get(name);

}

...

}

这就是Java泛型的全部内容:封装对象的包装器。那是因为Java泛型没有改进。他们使用类型擦除。之所以做出此决定,是因为Java泛型出现得太晚了,以至于他们不想破坏向后兼容性(Map只要需要a时就可以使用a Map)。将此与未使用类型擦除的.Net / C#进行比较,这会导致各种差异(例如,您可以使用原始类型,IEnumerable并且IEnumerable彼此之间没有任何关系)。

在JDK 1.4上可以使用使用Java 5+编译器编译的泛型的类(假定它不使用任何其他需要Java 5+的功能或类)。

这就是Java泛型被称为语法糖的原因。

但是,关于如何执行泛型的决定产生了深远的影响,以至于(一流的)Java Generics FAQ迅速出现,回答了人们对Java Generics的许多问题。

C ++模板具有Java泛型所没有的许多功能:

使用原始类型参数。

例如:

template

class Matrix {

int T[i][i];

...

}

Java不允许在泛型中使用基本类型参​​数。

使用默认类型实参,这是我在Java中缺少的功能之一,但是有向后兼容的原因。

Java允许参数的边界。

例如:

public class ObservableList {

...

}

确实需要强调的是,具有不同参数的模板调用实际上是不同的类型。他们甚至不共享静态成员。在Java中并非如此。

除了与泛型的区别之外,出于完整性的考虑,这里是C ++和Java(以及另一个)的基本比较。

我也可以建议使用Java进行思考。作为C ++程序员,对象之类的许多概念已经是天生的,但是存在细微的差别,因此即使您略过部分内容,也应该有介绍性的文字是值得的。

学习Java时,您将学到的很多东西都是库(标准库(JDK中附带的库)和非标准库,其中包括Spring等常用的东西)。Java语法比C 语法更冗长,并且不具有很多C功能(例如,运算符重载,多重继承,析构函数等),但这也并非严格使其成为C ++的子集。

2020-10-19

转载地址:http://gyldy.baihongyu.com/

你可能感兴趣的文章
SAP用户增强总结-采购订单建立增加客户数据增强示例
查看>>
物料帐结算,库存差异为何在下月初冲回
查看>>
rufus制作u盘启动
查看>>
dell r340安装window和linux
查看>>
OGG-14036 Schema is required for heartbeattable : gg_heartbeat.
查看>>
OGG-05673 CSN-based duplicate suppression is disabled because there is no checkpoint table for this
查看>>
19c多租户ogg微服务命令行查看参考
查看>>
【Python】【Python语言】Python3.7.2的关键字与保留字
查看>>
拆解老古董:一台60年代的双矿石收音机
查看>>
美敦力公开呼吸机,开发环境为Keil + ST10F276(STM32前身)
查看>>
TIOBE 4 月榜单 C 和 JAVA 几乎持平
查看>>
讲真,WiFi 6到底6在哪儿
查看>>
简单上手GDB调试
查看>>
ARMv8-M相比ARMv7-M架构优势在哪里?
查看>>
PCB差分信号设计中的3个常见误区
查看>>
精选汇总 | 嵌入式软硬件综合内容
查看>>
精选汇总 | 软件工具、 编译器、 编辑器
查看>>
全面解读操作系统中的内存管理,你懂几点?
查看>>
上世纪多个奇葩发明与设计
查看>>
同步整流和非同步整流有什么区别?
查看>>