过去曾经有很长一段时间,直至现在,存在这样的一种观点,就是C#比Java
我也很长一段实现认同这样的观点,因为人云亦云!
Java 5也开始支持泛型,而且最终正式发行比C# 2.0要早,我之前就使用过Beta版本C#的泛型,也熟悉C++的模板语法,可能是内心的傲慢,或者是懒惰,开始时只是将就着按照传统的经验使用Java 5提供的泛型。
对事物的一知半解总是令人困扰的,在阅读分析JDK源码时,总会遇到一些Java 5额外提供的泛型用法,一开始忽略不计,但是看多了总会注意到的。
例如java.util.Collections类中的sort方法和binarySearch方法的接口:
extends和super这两个关键字是C#和C++的泛型中都没有的,为什么需要这样的功能呢
例如如下情形:
如下代码:
这样,addAll(aList)和addAll(bList)都能够编译通过了。
另外super关键在算法中更是好用,如上面介绍的Collections.sort方法。如果你想在C#中实现一个和java.util.Collections.sort一样的方法,你会发现那是做不到的!
总结一下我的观点:
Java的泛型,语法有创新,更好用,向后兼容,编写泛型算法更方便,但是没有带来性能提升。