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的方式来实现那种同一个函数服务多种类型的想法,但是的确很低效。
原创粉丝点击