快速业务通道

面向Java开发人员的Scala指南 - 包和访问修饰符 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
tem.out.println("factorial 0 = 1")       }      }     }    }   } }

这样您可以节省一两行代码。注意这两个导入过程不能结合:先导入 BigInteger 类本身,再导入该类中的各种成员。

也可以使用 import 来引入其他非常量的成员。例如,考虑一下清单 6 中的数学工具库(或许不一定有什么价值):

清单 6. Enron 的记帐代码

package com {   package tedneward   {    package scala    {      // ...     package mathfun     {      object BizarroMath      {       def bizplus(a : Int, b : Int) = { a - b }       def bizminus(a : Int, b : Int) = { a + b }       def bizmultiply(a : Int, b : Int) = { a / b }       def bizdivide(a : Int, b : Int) = { a * b }      }     }    }   } }

面向Java开发人员的Scala指南 - 包和访问修饰符(4)

时间:2011-01-30 Ted Neward

使用这个库会越来越觉得麻烦,因为每请求它的一个成员,都需要键入 BizarroMath,但是 Scala 允许将 BizarroMath 的每一个成员导入最高层的词法空间,因此简直就可以把它们当成全局函数来使用(如清单 7所示):

清单 7. 计算 Enron的开支

package com {   package tedneward   {    package scala    {     package demonstration     {      object App2      {       def main(args : Array[String]) : Unit =       {        import com.tedneward.scala.mathfun.BizarroMath._        System.out.println("2 + 2 = " + bizplus(2,2))       }      }     }    }   } }

还有其他的一些构造很有趣,它们允许 Scala 开发人员写出更自然的 2 bizplus 2,但是这些内容本文不予讨论(想了解 Scala 潜在的可以用于其他用途的特性的读者可以看一下 Odersky、Spoon 和 Venners 所著的 Programming in Scala 中谈到的 Scala implicit 构造)。

访问

打包(和导入)是 Scala 封装的一部分,和在 Java 代码中一样,在 Scala 中,打包很大一部分在于以选择性方式限定访问特定成员的能力 — 换句话说,在于 Scala 将特定成员标记为 “公有(public)”、“private(私有)” 或介于两者之间的成员的能力。

Java 语言有四个级别的访问:公有(public)、私有(private)、受保护的(protected )和包级别(它没有任何关键词)访问。Scala:

废除了包级别的限制(在某种程度上)

默认使用 “公有”

指定 “私有” 表示 “只有此作用域可访问”

相反,Scala 定义 “protected” 的方式与在 Java 代码中不同;Java protected 成员对于子类和在其中定义成员的包来说是可访问的,Scala 中则仅有子类可访问。这意味着 Scala 版本的 protected 限制性要比 Java 版本更严格(虽然按理说更加直观)。

然而,Scala 真正区别于 Java 代码的地方是 Scala 中的访问修饰符可以用包名来 “限定”,用以表明直到 哪个访问级别才可以访问成员。例如,如果 BizarroMath 包要将成员访问权限授权给同一包中的其他成员(但不包括子类),可以用清单 8 中的代码来实现:

清单 8. Enron 的记帐代码

package com {   package tedneward   {    package scala    {      // ...     package mathfun     {      object BizarroMath      {       def bizplus(a : Int, b : Int) = { a - b }       def bizminus(a : Int, b : Int) = { a + b }       def bizmultiply(a : Int, b : I

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号