Scala:Any, AnyRef, AnyVal

原创
2017/03/10 15:32
阅读数 6K

Any

Any是abstract类,它是Scala类继承结构中最底层的。所有运行环境中的Scala类都是直接或间接继承自Any这个类,它就是其它语言(.Net,Java等)中的Object。

从Scala2.10 开始,对于一般性的traits(特性,特质)可以直接继承Any。一般性traits是指,继承自Any,并且只有defs成员,不需要初始化。

可以参考:http://www.scala-lang.org/api/current/scala/Any.html

最主要的一个用途就是为一些值类型提供简单的方法继承

trait Printable extends Any {
  def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends AnyVal with Printable

val w = new Wrapper(3)
w.print()

wrapper继承自AnyVal,AnyVal是值类型,并且扩展了traits,所以它就具有了Printable 的print方法

方法名 说明
getClass(): Class[_] 返回运行时类的对象
final def !=(arg0: Any): Boolean 判断两个对象不同
final def ##(): Int 对于除了null对象和被装箱的数值外,结果同hashCode
final def ==(arg0: Any): Boolean 判断两个对象是相同
final def asInstanceOf[T0]: T0 将传入的对象转为T0类型对象
def equals(arg0: Any): Boolean 比较对象是否相等
def hashCode(): Int 计算哈希值
final def isInstanceOf[T0]: Boolean 检查动态传入的对象是否是T0类型
def toString(): String  

AnyRef

是所有引用类型的基类。除了值类型,所有类型都继承自AnyRef 。

参考:http://www.scala-lang.org/api/current/scala/AnyRef.html

除上面表格提供的方法外,还提供如下方法:

final def eq(arg0: AnyRef): Boolean

final def ne(arg0: AnyRef): Boolean

final def notify(): Unit

final def notifyAll(): Unit

final def synchronized[T0](arg0: ⇒ T0): T0

final def wait(): Unit

final def wait(arg0: Long, arg1: Int): Unit

final def wait(arg0: Long): Unit

AnyVal

AnyVal 所有值类型的基类, 它描述的是值,而不是代表一个对象。 
它包括 9 个 AnyVal 子类型:

Scala.Double 
scala.Float 
scala.Long 
scala.Int 
scala.Char 
scala.Short 
scala.Byte 
上面是数字类型。

scala.Unit 和 scala.Boolean 是非数字类型。

Scala 2.10 之前, AnyVal 是一个密封的 trait,不能被继承。 从 Scala 2.10开始,我们可以自定义一个从 AnyVal继承下来的类型。

对于这些基本类型的描述,和我们其它语言是相通的,具体可以参考

http://www.scala-lang.org/api/current/scala/AnyVal.html

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部