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这些高层的技术背后其实都是一些基础的思想,各个语言各个框架各个平台“大同小异”,我们需要领悟这些,领悟了这些,我认为你学习其他应用方面的技术就不会太难,一切都是水到渠成。

感觉跑题了很多……

转载于:https://www.cnblogs.com/Devfly/archive/2009/09/24/awful-generics-in-java-and-more.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值