在Scala编程语言中,一切都是对象。甚至数据类型在Scala中都被视为对象,并且具有某种方法来执行由它们存储的数据的操作。因此,您定义的所有数据类型,函数/方法,类都有一个类型,并且该类型在类型层次结构中定义。
让我们来看看该类型的层次结构图,这将有助于你理解类型层次结构。
object myObject{ def main(args: Array[String]) { println("Creating a set of type = 'Any' ") val anySet : Set[Any] = Set(34, "nhooo", true, List(32, 3, 45)) println("Set is : " + anySet) } }
输出:
Creating a set of type = 'Any' Set为: Set(34, nhooo, true, List(32, 3, 45))
Any类型具有两个直接子类型:AnyVal和AnyRef类型。
代表值类型的Any子类型为AnyVal。在scala中,总共有九种预定义的值类型,它们是AnyVal的子类型。他们是 :
Double表示双精度十进制类型。
Float表示单精度十进制类型。
Long表示64位有符号整数类型(值:-9223372036854775808至9223372036854775807)。
Int表示32位带符号整数类型(值:-2147483648至2147483647)。
Short代表16位带符号整数类型(值:-32768至32767)。
Byte代表8位有符号值(值:-128至127)。
Char表示字符类型(值:所有有效字符)。
Unit代表单位类型。
Boolean表示布尔类型(值:true / false)。
程序:
object myObject{ def main(args: Array[String]) { println("Creating a set of type = 'AnyVal' ") val anySet : Set[AnyVal] = Set(987.12331, 89.76, 87694421, 34, 'i', true) println("Set为: " + anySet) } }
输出:
Creating a set of type = 'AnyVal' Set为: HashSet(89.76, 87694421, true, i, 34, 987.12331)
表示非值类型的Any的子类型为AnyRef。默认情况下,所有用户定义的类都引用此类型。
程序:
object myObject{ def main(args: Array[String]) { println("Creating a set of type = 'AnyRef' ") val anySet : Set[AnyRef] = Set("includehelp") println("Set为: " + anySet) } }
输出:
Creating a set of type = 'AnyRef' Set为: Set(includehelp)
这些与Scala库的主要类型有关,它为Scala中的所有实体提供了一些基本功能。
层次结构的底部有两个重要的类型。他们是,
Nothing
Null
Scala中所有类型的子类型在层次结构底部的类型为Nothing。没有这种类型的值。
程序:
object myObject{ def main(args: Array[String]) { println("Creating a set of type = 'Nothing' ") val anySet : Set[Nothing] = Set() println("Set为: " + anySet) } }
输出:
Creating a set of type = 'Nothing' Set为: Set()
Scala中的Nothing类型用于发信号通知非终止,例如程序退出。
该类型是引用类型的子类型(对于AnyRef类型的所有子类型)。
程序:
object myObject{ def main(args: Array[String]) { println("Creating a set of type = 'Null' ") val anyRef : List[Null] = List() println("Set为: " + anyRef) } }
输出:
Creating a set of type = 'Null' Set为: List()