快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
va 的接口,接合到 Student:

清单 14. 我,学生

//This is Scala trait Student {    def getFirstName : String;    def getLastName : String;    def setFirstName(fn : String) : Unit;    def setLastName(fn : String) : Unit;    def teach(subject : String) }

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

时间:2011-01-30 IBM Ted Neward

在编译时,它会转换成 POJI:Plain Old Java Interface,查看 javap 会看到这样的内容:

清单 15. 这是一个 POJI!

$ javap Student Compiled from "Student.scala" public interface Student extends scala.ScalaObject{    public abstract void setLastName(java.lang.String);    public abstract void setFirstName(java.lang.String);    public abstract java.lang.String getLastName();    public abstract java.lang.String getFirstName();    public abstract void teach(java.lang.String); }

接下来,我需要一个类成为工厂本身。通常,在 Java 代码中,这应该是类上的一个静态方法(名称类似于 “StudentFactory”),但回忆一下,Scala 并没有此类的实例方法。我认为这就是我在这里希望得到的结论,因此,我创建了一个 StudentFactory 对象,将我的 Factory 方法放在那里:

清单 16. 我构造 Students

//This is Java object StudentFactory {    class StudentImpl(var first:String, var last:String, var subject:String)      extends Student    {      def getFirstName : String = first      def setFirstName(fn: String) : Unit = first = fn      def getLastName : String = last      def setLastName(ln: String) : Unit = last = ln      def teach(subject : String) =        System.out.println("I know " + subject)    }    def getStudent(firstName: String, lastName: String) : Student =    {      new StudentImpl(firstName, lastName, "Scala")    } }

嵌套类 StudentImpl 是 Student 特征的实现,因而提供了必需的 get()/set() 方法对。切记,尽管特征可以具有行为,但它根据 JVM 作为接口建模这一事实意味着尝试实例化特征将产生错误 —— 表明 Student 是抽象的。

当然,这个简单示例的目的在于编写出一个 Java 应用程序,使之可以利用这些由 Scala 创建的新对象:

清单 17. 学生 Neo

//This is Java public class App {    public static void main(String[] args)    {      Student s = StudentFactory.getStudent("Neo", "Anderson");      s.teach("Kung fu");    } }

运行此代码,您将看到:“I know Kung fu”。(我知道,我们经过了漫长的设置过程,只是得到了一部廉价电影的推介)。

结束语

人们不喜欢思考。思考总是要得出结论。而结论并非总是令人愉快。

— Helen Keller

特征提供了在 Scala 中分类和定义的强大机制,目的在于定义一种接口,供客户端使用,按照 传统 Java 接口的形式定义;同时提供一种机制,根据特征内定义的其他行为来继承行为。或许我们需要的是一种全新的继承术语,用于 描述特征和实现类之间的关系。

除了本文所述内容之外,还有很多种方法可以使用特征,但本系列文章的部分目的就在于提供关于这种语言的足够信息,鼓励您在家中进一步开展实验;下载 Scala 实现,亲自试用,查看 Scala 可插入当前 Java 系统的什么位置。此外,如果您发现 Scala 非常有用,如果您对本文有任何意见建议

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