zoukankan      html  css  js  c++  java
  • Scala学习笔记(八):Scala的层级

    在 Scala 中,所有的类都有一个公共的基类称为 Any

    由于所有的类都继承自 Any,因此 Scala 中的对象都可以使用 == 、 != 或 equals 来比较,使用 ## 或 hashCode 给出 hash 值,使用 toString 转为字符串。

    Any 的 == 和 != 定义为 fianl,因此不可以被子类重写

    == 实际上和 equals 等价,!= 和 equals 的否定形式等价,因此重写 equals 可以修改 == 和 != 的定义。

    根类Any有两个子类AnyVal和AnyRef

    AnyVal

    AnyVal 是 Scala 里每个内建值类型的父类,这样的值类型有九个:Byte,Short,Char,Int,Long,Float,Double,Boolean 和 Unit。

    上述值类的前八个对应 Java 的基本数值类型,它们的值在运行时表示成 Java 的类型,它们的实例都写成字面量,如:42 是 Int 的实例,’x’ 是 Char 的实例,false 是 Boolean 的实例。

    Unit,对应于 Java 的 void 类型,用于不返回任何结果的方法中,它只有一个实例,被写作()

    值类型都被定义为既是抽象的又是 final 的,不能使用 new 创造这些类的实例。

    值类从类 Any 继承所有的方法

    scala> 11 toString
    res0: String = 11
    scala> 11.hashCode
    res1: Int = 11

    隐式转换为值类型添加更多的功能

    scala> 1 max 2
    res0: Int = 2
    scala> 1 min 2
    res1: Int = 1
    scala> 1 until 5
    res2: scala.collection.immutable.Range = Range(1, 2, 3, 4)
    scala> 1 to 5 
    res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
    scala> (-3).abs
    res4: Int = 3

    原理:方法 min、max、until、to 和 abs 都定义在类 scala.runtime.RichInt 中,并且有一个从 Int 到 RichInt 的隐式转换,当在 Int 上调用没有定义在 Int 上但定义在 RichInt 上的方法时,这个转换就被应用了。

    值类型之间的关系是扁平的,所有的值类都是 scala.AnyVal 的子类型,不同的值类型之间可以隐式地互相转换。

    例如:scala.Int 的实例可以自动放宽(通过隐式转换)到 scala.Long 的实例。

    AnyRef

    AnyRef 是 Scala 里所有引用类的基类。

    在 Java 平台上 AnyRef 实际就是类 java.lang.Object 的别名。

    NULL

    Null 代表 null 引用,它是所有引用类的子类

    Null 和值类型不兼容,也就是比如说,不能把 null 赋值给一个整数类型变量

    Nothing

    Nothing 为类层次关系的最下方,它是所有其他类的子类,然而这个类型没有任何实例

    Predef 的有一个 error 方法:

    def error(message:String) :Nothing =
      throw new RuntimeException(message)

    因为 Nothing 是所有其它类型的子类,所以可以灵活使用如 error 这样的函数

    def check(x:Int,y:Int):Int=
      if(y!=0) x/y
      else error("Cannot divide by Zero")
  • 相关阅读:
    excel处理经纬度
    Bootstrap:弹出框和提示框效果以及代码展示
    c# 多张图片合成一张图片
    webapi------宿主程序
    git安装完设置成中文
    邮件帮助类
    IISHelper操作iis
    删除数组中的重复项
    SQL 、LINQ日前比较
    PostAsync与GetAsync
  • 原文地址:https://www.cnblogs.com/studyLog-share/p/4791181.html
Copyright © 2011-2022 走看看