JAVA不支持C++的模板
来源:互联网 发布:淘宝网天天特价在哪里 编辑:程序博客网 时间:2024/05/22 03:07
Java的特性比C++少得多。Java不支持模板。只支持很少的类似于C++模板的语法来实现很有限的泛型编程。
Java对泛型编程的支持也是最近才加进去的,而且支持的很不好。你就不用指望能像C++那样用它了。
Java是一个非常纯粹的OOP语言,它天生就是相对动态的、后期的,编译期处理的信息非常少,这和C++强静态的特性是完全相反的。
Java的绝大部分类型信息都属于RTTI,也就是在运行时动态获取,不像C++是在编译期由编译器推导的,所以Java基本上不可能支持C++那样灵活的模板。
Java的泛型也是,说白了只是个障眼法,用类似C++那样的模板语法来包装了其面向对象动态cast的本质而已。
举例说,java中的Vector<int>,你给里面保存int的时候,每一个int都是先被包装成一个Integer对象然后塞进去,取出来的时候是先取出Object对象,转换成Integer对象,然后再从里面取出int这个整数,绕了很大一个弯子。
虽然从代码上写的和C++差不多都很简洁,但是实际的效率和C++差了n个数量级。这点上实在是比较恶心,C#都做得比它好,C#至少对于值类型还是会实例化代码的。
Java天生就是一个鼓励动态化、运行期化、OOP化的一个语言,所以它不适合使用C++中那些泛型编程的范式来设计程序。你如果能够忍受Java的装箱拆箱的巨大效率损失,你可以用OOP的方式来实现那种同一个函数服务多种类型的想法,但是的确很低效。
Java对泛型编程的支持也是最近才加进去的,而且支持的很不好。你就不用指望能像C++那样用它了。
Java是一个非常纯粹的OOP语言,它天生就是相对动态的、后期的,编译期处理的信息非常少,这和C++强静态的特性是完全相反的。
Java的绝大部分类型信息都属于RTTI,也就是在运行时动态获取,不像C++是在编译期由编译器推导的,所以Java基本上不可能支持C++那样灵活的模板。
Java的泛型也是,说白了只是个障眼法,用类似C++那样的模板语法来包装了其面向对象动态cast的本质而已。
举例说,java中的Vector<int>,你给里面保存int的时候,每一个int都是先被包装成一个Integer对象然后塞进去,取出来的时候是先取出Object对象,转换成Integer对象,然后再从里面取出int这个整数,绕了很大一个弯子。
虽然从代码上写的和C++差不多都很简洁,但是实际的效率和C++差了n个数量级。这点上实在是比较恶心,C#都做得比它好,C#至少对于值类型还是会实例化代码的。
Java天生就是一个鼓励动态化、运行期化、OOP化的一个语言,所以它不适合使用C++中那些泛型编程的范式来设计程序。你如果能够忍受Java的装箱拆箱的巨大效率损失,你可以用OOP的方式来实现那种同一个函数服务多种类型的想法,但是的确很低效。
- JAVA不支持C++的模板
- C语言不支持函数模版和类模板的使用
- VC6不支持的模板特性
- 【C++】为什么模板不支持分离编译
- c++-模板不支持分离编译错误分析
- 【c++】模板为什么不支持分离编译
- c++:为什么模板不支持分离编译?
- java不支持的写法
- VC6不支持这样的函数模板吗????
- java利用Freemarker模板生成格式友好的doc文档(这种方式不支持docx)
- 浏览器不支持java的解决办法
- 模板类的默认模板参数、模板函数不支持默认模板参数
- C++ 模板类的默认模板参数、模板函数不支持默认模板参数
- 模板类的默认模板参数、模板函数不支持默认模板参数
- 模板不支持分离编译。
- 模板不支持分离编译???
- 模板不支持分离编译
- 新浪博客不支持C语言的注释
- ZOJ-1862 Mine Sweeper
- 最短路径简单应用 畅通工程续 POJ 1874
- LeetCode: Combination Sum
- c语言一个栈的实现
- 可重入函数和不可重入函数
- JAVA不支持C++的模板
- new
- c语言队列的实现
- java.io.tmpdir的默认在操作系统的什么位置以及如何配置
- dbms_metadata.get_ddl学习
- 程序员与妓-女
- 移除LC_CODE_SIGNATURE
- 编译CClive
- android 基于apache ftp server