java具有泛型和C++,提供了templates的非常强大的编程模型.

推荐答案

他们之间有很大的不同.在C++中,不必为泛型类型指定类或接口.这就是为什么您可以创建真正的泛型函数和类,但需要注意的是更松散的类型.

template <typename T> T sum(T a, T b) { return a + b; }

上面的方法添加了两个相同类型的对象,可以用于任何具有"+"运算符的类型T.

在Java中,如果要对传递的对象调用方法,必须指定类型,例如:

<T extends Something> T sum(T a, T b) { return a.add ( b ); }

在C++中,泛型函数/类只能在头文件中定义,因为编译器为不同的类型生成不同的函数(用来调用).因此编译速度较慢.在Java中,编译没有很大的损失,但是Java使用了一种称为"擦除"的技术,其中泛型类型在运行时被擦除,所以在运行时Java实际上是在调用……

Something sum(Something a, Something b) { return a.add ( b ); }

所以Java中的泛型编程并不是真正有用的,它只是帮助新的foreach构造的一点语法糖.

EDIT:以上关于有用性的观点是一位年轻人写的.Java的泛型当然有助于类型安全.

Java相关问答推荐

让两个方法来回调用有缺点吗?

LocalTime解析截断时间的第二个值

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

Java JAR环境(JRE)是否支持模块?

如何在Android上获取来电信息

@从类文件中删除JsonProperty—Java

Java Stream,需要更新列表对象列表

在现代操作系统/硬件上按块访问数据值得吗?

Java中是否有某种类型的池可以避免重复最近的算术运算?

Java中如何根据Font.canDisplay方法对字符串进行分段

内存中的H2修剪尾随空格

无法在Java中处理PayPal支付响应

使用Room Database删除Jetpack合成中的所有项目后,UI未重新合成

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

有效的公式或值列表必须少于或等于255个字符

使用htmlunit和java单击按钮

try 使用Spring集成和MySQL实现发件箱模式时,锁定等待超时

Java中的一个错误';s stdlib SocksSocketImpl?

javax.crypto-密码对象-提供者服务是如何工作的?

Java泛型方法重载