Scala的泛型:最强大的特性
创始人
2024-06-06 15:01:37
0
文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice译成中文。第一篇为Scala简单做了一下入门,第二篇描述Scala对象,第三篇对Scala类做了一些介绍,第四篇介绍了Scala的模式匹配,第五篇则介绍Scala的Trait。下面是最后一部分,讲述Scala的泛型。在Scala创始人Martin Odersky给51CTO的交流信件中他也提到过,说Scala的泛型是Scala最大的优势之一。

51CTO编辑推荐:Scala编程语言专题

8 Scala的泛型

我们在这文章将要学习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,你不可能在这个引用中放置其他类型的对象。

9 结语

本文简要介绍了Scala语言的一些特性,并且同时展示了若干实例。有兴趣的读者可以继续阅读本文的姊妹篇:《Scala By Example》,该文覆盖了Scala的更多的高级特性。如果需要还可以去阅读《Scala Language Specification》。

【相关阅读】

  1. Scala的Trait:可以包含代码的接口
  2. Scala的模式匹配和条件类
  3. Scala类:复数类,无参方法,继承和覆盖
  4. 万物皆对象:介绍Scala对象
  5. Scala入门:Scala例子,以及如何与Java交互

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...