Java方法括号中的参数是指_scala类和方法有时候会有[],这个中括号中的参数指的是什么?为什么java中没有这个东西?...

这里的中括号就是类型参数化,也就是Java的泛型。只是Scala的类型系统较Java来说复杂很多,因此建议不要把Java往Scala这边套。

在您的这个例子中,类型参数ED被注解@specialized修饰,这是Scala的Type Specialization特性,本质上还是为了填Java假泛型和基本类型不属于Object的坑。由于Java中泛型被擦除成了Object,而Java的所有基本类型又不是Object,因此泛型使用基本类型时会被装箱(也就是只可以List而不能List的原因)。

Scala为了避免这个装箱和拆箱的开销,通过@specialized修饰的类型会被编译器特殊处理,在确定类型的情况下直接编译成对应JVM上的基本类型,也就是说编译器发现它实际是什么基本类型,就会编译一个对应类型的class版本出来。这样虽然会使字节码膨胀,但是可以减轻运行时的开销(本质上就和Java中为了提升性能,使用IntStream而不是Stream做计算一样,只是Scala在编译器层面提供了这一工具,不需要手动编写一个类似的class出来)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值