快速业务通道

面向Java开发人员的Scala指南 - 关于特征和行为 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
的 main() 才会被调用并显示执行所耗费的时间。

虽然有些落后,但它仍然有效,尽管应用程序无权访问任何传入 main() 的命令行参数。它还表明特征的行为如何 “下放到” 实现类。

特征和集合

不是解决方法的一部分,就注定被淘汰。

— Henry J Tillman

在将具体行为与抽象声明相结合以便为实现者提供便捷时,特征非常强大。例如,考虑经典的 Java 集合接口/类 List 和 ArrayList。List 接口保证此集合的内容能够按照插入时的次序被遍历,用更正规的术语来说,“位置语义得到了保证”。

面向Java开发人员的Scala指南 - 关于特征和行为(8)

时间:2011-01-30 IBM Ted Neward

ArrayList 是 List 的具体类型,在分配好的数组中存储内容,而 LinkedList 使用的是链表实现。ArrayList 更适合列表内容的随机访问,而 LinkedList 更适合在除了列表末尾以外的位置进行插入和删除操作。无论如何,这两种类之间存在大量相同的行为,它们继承了公共基类 AbstractList。

如果 Java 编程支持特征,它们应已成为出色的结构,能够解决 “可重用行为,而无需诉诸于继承公共基类” 之类的问题。特征可以作为 C++ “私有继承” 机制,避免出现新 List 子类型是否应直接实现 List(还有可能忘记实现 RandomAccess 接口)或者扩展基类 AbstractList 的迷惑。这有时在 C++ 中称为 “混合”,与 Ruby 的混合(或后文中探讨的 Scala 混合)有所不同。

在 Scala 文档集中,经典的示例就是 Ordered 特征,它定义了名字很有趣的方法,以提供比较(以及排序)功能,如清单 13 所示:

清单 13. 顺序、顺序

//This is Scala trait Ordered[A] {   def compare(that: A): Int   def < (that: A): Boolean = (this compare that) < 0   def > (that: A): Boolean = (this compare that) > 0   def <= (that: A): Boolean = (this compare that) <= 0   def >= (that: A): Boolean = (this compare that) >= 0   def compareTo(that: A): Int = compare(that) }

在这里,Ordered 特征(具有参数化类型,采用 Java 5 泛型方式)定义了一个抽象方法 compare,它应获得一个 A 作为参数,并需要在 “小于” 的情况下返回小于 1 的值,在 “大于” 的情况下返回大于 1 的值,在相等的情况下返回 0。然后它继续使用 compare() 方法和更加熟悉的 compareTo() 方法(java.util.Comparable 接口也使用该方法)定义关系运算符(< 和 > 等)。

Scala 和 Java 兼容性

一张图片胜过千言万语。一个界面胜过上千图片。

—Ben Shneiderman

实际上,伪实现继承并不是 Scala 内特征的最常见应用或最强大用法,与此不同,特征在 Scala 内作为 Java 接口的基本替代项。希望使用 Scala 的 Java 程序员也应熟悉特征,将其作为使用 Scala 的一种机制。

我在本系列的文章中一直强调,编译后的 Scala 代码并非总是能够保证 Java 语言的特色。例如,回忆一下,Scala 的 “名字很有趣的方法”(例如 “+” 或 “\”),这些方法往往会使用 Java 语言语法中不直接可用的字符编码(“contentrdquo; 就是一个需要考虑的严重问题)。出于这方面的原因,创建 “Java 可调用” 的接口往往要求深入研究 Scala 代码。

这个特殊示例有些憋足,Scala 主义者 通常并不需要特征提供的间接层(假设我并未使用 “名字很有趣的方法”),但概念在这里十分重要。在清单 14 中,我希望获得一个传统的 Java 风格工厂,生成 Student 实例,就像您经常在各种 Java 对象模型中可以看到的那样。最初,我需要一个兼容 Ja

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