咱们在这文章将要学习Scala的最后一个特性是泛型。Java程序员们可能最近才知道这个东西,由于这个特性是在Java1.5中才被加入的。
泛型是一种可让你使用类型参数的设施。例如当一个程序员正在实现一个链表时,将不得不面对诸如如何决定链表中节点保存数据的类型之类的问题。正由 于这是一个链表,因此每每会在不一样的环境中使用,所以,咱们不能草率的决定节点数据类型,好比说Int。这种决定是至关的草率且局限性的。
之前Java程序员们一般使用Object,全部类型的超类,来解决问题。可是这种方法远远算不上是理想方案,例如他没法处理基本类型如int、 long、float等(1.6中的autobox特性能够解决这个问题——译者注),并且会让使用者不得不使用大量的动态类型转换。
Scala中的泛型机制能够很轻松的解决这些个问题。来看下面这个最简单的容器类:一个引用,能够指向某个对象或者指向空。
class Reference[T] { private var contents: T = _ def set(value: T) { contents = value } def get: T = contents }
Reference类具备一个叫作T的类型参数来表示他说引用的对象的类型。这个类型在Reference中做为了变量和函数的参数或者返回类型。
上面的代码还演示了Scala中变量的表达方式,这个无需更多的解释你们都能清楚。不过值得注意的是咱们给他赋予的初始值:_ ,这个表示一个默认值,对于数字类型来讲是0,对于boolean来讲是false,对于Unit(函数签名)来讲是() (无参数无返回),对于其余来讲是null。
要使用这个Reference 类,你须要制定他的类型参数,来告知这个引用到底引用了什么类型。例如要建立一个指向Int的引用,你能够这么写:
object IntegerReference { def main(args: Array[String]) { val cell = new Reference[Int] cell.set(13) println("Reference contains the half of " + (cell.get * 2)) } }
程序员
就像咱们看到的,咱们不须要吧get的返回值强制转换成Int,并且因为它被声明成Int,你不可能在这个引用中放置其余类型的对象。微信
更多精彩内容请关注:http://bbs.superwu.cn ide
关注超人学院微信二维码:函数