Java的泛型原来这样让人不舒服

Type erasure

Java泛型中的类型擦除,意为只在编译时刻进行类型检查,实际在运行时,编译器会自动插入相应的转换(cast)代码。

List<String> list = new ArrayList<String>();
list.add("Hi");
String x = list.get(0);

以上代码将会被中间编译为:

List list = new ArrayList();
list.add("Hi");
String x = (String) list.get(0);

我感觉Java的泛型很假,其实只是表面性的工作,只是在编译时刻进行检查,运行时都是Object,然后转换成相应的类型。在Java中,基本类型(int,bool,long)还不能作为类型参数。Java的泛型实质上没带来效率的提升,相反,C#的泛型实现就不一样了,一切都在运行时确定。谈语言,相对于Java,我还是喜欢C#语言。不过学习Java真方便,鼠标点在某个方法上某个类上,按住Ctrl,就看见源代码。.NET现在也有这方面的东西了,不过感觉还是Java直接。我感觉学习Java要比.NET快,因为很透明,大概这需要一定的基础支撑吧,有了一定的思想,技术平台间的迁移我觉得不难。如果你用过C#,又用过Java,但是你若不知道C#和Java之间的差别,那就不好了。这说明你在被技术牵着走,没有自己的思考。我们需要的不是“精通”N多的XXX框架,我们需要了解这些框架的架构设计,能做出灵活选择,知道各个框架的特点和弱点,来让其为我们服务,我们要用最合适的技术来解决遇到的问题。基础很重要,像.NET,Java这些高层的技术背后其实都是一些基础的思想,各个语言各个框架各个平台“大同小异”,我们需要领悟这些,领悟了这些,我认为你学习其他应用方面的技术就不会太难,一切都是水到渠成。

感觉跑题了很多……

posted @ 2009-09-24 00:36  Kevin Dai  阅读(564)  评论(0编辑  收藏  举报