api翻译AnyVal

abstract class AnyVal extends Any
AnyVal是所有类型的根类型,它描述值没有作为对象在底层主机系统中的实现,值类型被详细的在Scala语言的12.2节中描述
标准的实施包括9个AnyVal的子类型
scala.Double,scala.Float,scala.Long,scala.Int,scala.Char,scala.Short和scala.Byte是数字类型
scala.Unit和scala.Boolean是非数字类型
其他分组
子范围有scala.Byte,scala.Short,scala.Char
整数类型包括scala.Int和scala.Long
浮点数类型包括scala.Float和scala.Double

此前scala2.10,AnyVal作为一个私密的特质,从scala2.10开始,然而,可以定义一个AnyVal的子类,称为有编译器经过特殊处理的用户值的类,正确的定义用户值类提供了一种方法通过与静态方法调用替换虚拟方法调用和避免无效类型被调用来改善在运行时用户定义类型的执行。

用户定义值类型避免对象分配
必须有一个单一val参数表示在底层运行时
可以定义defs但是没有vals,vars,或者嵌套特质、类和对象
通常除了AnyVal没有扩张其他特质
不可以在类型测试或模式匹配中使用
可能没有重载equals或者hashCode方法

一个小例子
class Wrapper(val underlying:Int) extends AnyVal{
     def foo :Wrapper = new Wrapper(underlying *19)
}

重要的是注意,用户定义值类是有限的,而且在某些情况下,还必须在运行是分配一个值类型的实例,这些限制和情况更详细的在值类手册以及SIP-15中说明:值类,scala的改进建议

AnyVal.scala
线性超类型
Any
已知子类
ArrowAssoc, Boolean, Byte, Char, Double, DoubleMult, DurationDouble, DurationInt, DurationLong, Ensuring, Float, Int,IntMult, Long, LongMult, MergeableEither, Ops, Ops, RichBoolean, RichByte, RichChar, RichDouble, RichException,RichFloat, RichInt, RichLong, RichShort, Short, StringAdd, StringFormat, StringFormat, StringOps, Tuple2Zipped,Tuple3Zipped, Unit, any2stringadd, ofBoolean, ofByte, ofChar, ofDouble, ofFloat, ofInt, ofLong, ofRef, ofShort, ofUnit
类型层次

Any

AnyVal


46种类或者特质



实例构造
new AnyVal()


值成员

          def getClass():Class[_ <AnyVal]

猜你喜欢

转载自cjuexuan.iteye.com/blog/2228007
今日推荐