快速业务通道

面向Java开发人员的Scala指南 - 类操作 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

面向Java开发人员的Scala指南 - 类操作

时间:2011-01-30 IBM Ted Neward

Java™ 开发人员可以将对象作为理解 Scala 的出发点。本文是面向 Java 开发人员的 Scala 指南 系列 的第二期,作者 Ted Neward 遵循对一种语言进行评价的基本前提:一种语言的威力可以直接通过它集成新功能的能力衡量,在本文中就是指对复数的支持。跟随本文,您将了解在 Scala 中与类的定义和使用有关的一些有趣特性。

在上一期 文章 中,您只是稍微了解了一些 Scala 语法,这些是运行 Scala 程序和了解其简单特性的最基本要求。通过上一篇文章中的 Hello World 和 Timer 示例程序,您了解了 Scala 的 Application 类、方法定义和匿名函数的语法,还稍微了解了 Array[] 和一些类型推断方面的知识。Scala 还提供了很多其他特性,本文将研究 Scala 编程中的一些较复杂方面。

Scala 的函数编程特性非常引人注目,但这并非 Java 开发人员应该对这门语言感兴趣的惟一原因。实际上,Scala 融合了函数概念和面向对象概念。为了让 Java 和 Scala 程序员感到得心应手,可以了解一下 Scala 的对象特性,看看它们是如何在语言方面与 Java 对应的。记住,其中的一些特性并不是直接对应,或者说,在某些情况下,“对应” 更像是一种类比,而不是直接的对应。不过,遇到重要区别时,我会指出来。

Scala 和 Java 一样使用类

我们不对 Scala 支持的类特性作冗长而抽象的讨论,而是着眼于一个类的定义,这个类可用于为 Scala 平台引入对有理数的支持(主要借鉴自 “Scala By Example”,参见 参考资料):

清单 1. rational.scala

class Rational(n:Int, d:Int) {  private def gcd(x:Int, y:Int): Int =  {   if (x==0) y   else if (x<0) gcd(-x, y)   else if (y<0) -gcd(x, -y)   else gcd(y%x, x)  }  private val g = gcd(n,d)  val numer:Int = n/g  val denom:Int = d/g  def +(that:Rational) =   new Rational(numer*that.denom + that.numer*denom, denom * that.denom)  def -(that:Rational) =   new Rational(numer * that.denom - that.numer * denom, denom * that.denom)  def *(that:Rational) =   new Rational(numer * that.numer, denom * that.denom)  def /(that:Rational) =   new Rational(numer * that.denom, denom * that.numer)  override def toString() =   "Rational: [" + numer + " / " + denom + "]" }

从词汇上看,清单 1 的整体结构与 Java 代码类似,但是,这里显然还有一些新的元素。在详细讨论这个定义之前,先看一段使用这个新 Rational 类的代码:

清单 2. RunRational

class Rational(n:Int, d:Int) {   // ... as before } object RunRational extends Application {   val r1 = new Rational(1, 3)   val r2 = new Rational(2, 5)   val r3 = r1 - r2   val r4 = r1 + r2   Console.println("r1 = " + r1)   Console.println("r2 = " + r2)   Console.println("r3 = r1 - r2 = " + r3)   Console.println("r4 = r1 + r2 = " + r4) }

面向Java开发人员的Scala指南 - 类操作(2)

时间:2011-01-30 IBM Ted Neward

清单 2 中的内容平淡无奇:先创建两个有理数,然后再创建两个 Rational,作为前面两个有理数的和与差,最后将这几个数回传到控制台上(注意, Console.println() 来自 Scala 核心库,位于 scala.* 中,它被隐式地导入每个 Scala 程序中,就像 Java 编程中的 java.lang 一样)。

用多少种方法构造类?

现在,回顾一下 Rational 类定义

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号