`
zhao_rock
  • 浏览: 191369 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

利用scala的trait特性实现简单AOP

 
阅读更多

最近开始系统的研究下scala

 

trait字面意思是特质或者特征,这里翻译成特征比较合适。

scala中trait的意义和java中接口很类似,但是trait支持实现,也就是说在scala的trait中方法可以是抽象方法,也可以是带实现的非抽象方法。
另一个重要的与java interface的不同点,scala可以在一个class实例化的时候通过with关键字混合进一个trait。with关键字用来实现包装器的功能。

利用上面提到的特性,来实现一个简单的AOP

定义一个SchoolTrait,添加一个抽象方法,不需要将方法声明为abstract,特征中未被实现的方法默认就是抽象的

 

package test

trait SchoolTrait {
  
   def study()
}

 

 

定义一个ClassTrait,ClassTrait继承于SchoolTrait,并重写父类SchoolTrait的study方法

 

package test

trait ClassTrait extends SchoolTrait{
  
  abstract override def study()={
    //上课前向老师问好
    println("=====Hello Teacher=====")
      //调用原来的处理
      super.study
    println("=====Goodbye Teacher=====")
    //下课后向老师道别
  }
  
}

 

 

下面用一个测试类TeachClass,来进行验证

 

 

package test

class TeachClass extends SchoolTrait{
  
  def study(){
    println("*** start math cource ***");
  }
  
}

object TeachClass {
  
  def main(agrs : Array[String]){
    val test = new TeachClass with ClassTrait
    test.study
  }
  
}

 

 

查看运行结果

=====Hello Teacher=====
*** start math cource ***
=====Goodbye Teacher=====

 

 

 

 

0
2
分享到:
评论

相关推荐

    Scala Trait(特质).html

    Scala Trait(特征) 1.Scala中没有接口(interface)的概念 2.特质用于在类之间共享程序接口和字段,类似Java接口 3.特质是字段和方法的集合,可以提供字段和方法实现 4.类和单例对象都可以扩展特质(extends) 5....

    scala高级特性

    Scala 高级特性 Scala 是一个多-paradigm programming language,它结合了面向对象和函数式编程的特性。在这个主题中,我们将深入探讨 Scala 的高级特性,包括高阶函数和隐式转换。 高阶函数 高阶函数是 Scala ...

    scala实现朴素贝叶斯算法

    将朴素贝叶斯算法用Scala实现,可以充分利用其面向函数特性和高效的并发处理能力。 首先,我们需要理解朴素贝叶斯的基本原理。该算法假设特征之间相互独立,并且每个特征对分类结果的影响是独立的,这就是所谓的...

    scala sdk scala-2.12.3

    8. **面向对象编程**:Scala支持传统的类、继承、封装和多态性,同时也引入了特质(trait),可以用来实现混合类型和行为。 9. **函数式编程**:函数在Scala中是一等公民,可以作为参数传递,也可以作为返回值。...

    CrossCuttingConcern_Scala:在 Scala 中使用面向切面编程 (AOP) 实现横切关注

    "CrossCuttingConcern_Scala" 可能就是这样一个项目,它展示了如何在 Scala 中利用第三方库如 Scalaz 或 Aspects4s 来实践 AOP。 Scalaz 是一个强大的 Scala 库,提供了许多函数式编程工具,包括类型类、Monads 和...

    scala版DVD管理系统

    通过以上分析,我们可以看出,这个"Scala版DVD管理系统"充分展示了Scala语言的强大特性和灵活性,实现了对DVD的高效管理。在实际项目中,开发人员可能还需要关注日志记录、错误处理、单元测试和集成测试等方面,以...

    Programming in Scala.pdf

    《Programming in Scala》是Scala编程语言的一本权威指南,由...通过阅读这本书,读者不仅可以了解到Scala的基本语法,还能深入理解其背后的编程哲学,从而能够充分利用Scala的特性来解决复杂问题,提高开发效率。

    差分进化算法的Scala实现_Scala_代码_下载

    在实现差分进化算法时,可能会用到Scala的高阶函数、模式匹配、case类、特质(trait)以及可变和不可变集合等特性。 3. **并行计算与Spark框架**:文件名中的"spark"表明可能利用Apache Spark进行并行计算。Spark是...

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...

    scala2.12.1Windows镜像包

    - **JVM兼容性**:Scala 2.12.x主要针对Java 8及更高版本进行优化,充分利用了JVM的新特性,如Lambda表达式和Stream API。 - **互操作性**:Scala可以直接调用Java库,反之亦然,这得益于良好的Java互操作性。 - ...

    最好的scala学习 课件

    Scala支持类、对象、继承、封装和多态,同时引入了特质(trait),它允许你实现多重继承的效果。这部分还会讲解伴生对象(companion object)和隐式转换,这些特性使得Scala的面向对象设计更加灵活。 "Scala进阶之...

    Scala编程书合集

    通过阅读这本规范,开发者可以直接了解语言的底层机制,解决在编程过程中遇到的特定问题,或者为了更深入地理解Scala的某些特性,比如类型推断、特质(trait)和宏(macro)。 接下来是《Programming in Scala》的...

    scala-2.12.8 源码包

    6. ** Trait**:Scala的Trait是类似于接口的结构,但可以包含具体实现。它们用于实现多继承和行为组合。源码中可以学习Trait的实现细节。 7. **类型推断**:Scala的类型推断使得编写简洁的代码成为可能,编译器会...

    快学Scala完整版&Scala编程(中文版)&Scala程序设计-多线程编程实践

    书中可能详细讲解了Scala如何利用JVM的并行能力,比如使用 Futures 和 Promises 实现异步编程,通过 Actors 实现消息驱动的并发,以及如何利用 Scala 的并发原语如 `Await`、`Promise` 和 `Future` 来编写高效、安全...

    scala中文版

    Scala是一种现代的多范式编程语言,集成了面向对象编程和函数式编程的特性。本篇知识点将围绕Scala中文...通过学习Scala,程序员可以掌握一种强大且表达力强的语言,利用Scala的特性来设计和实现高效、可靠的软件系统。

    scala学习笔记整理

    5. ** Trait**:Scala的Trait类似于Java的接口,但可以包含实现,允许多重继承。Trait是实现行为组合的重要手段,有助于避免“菱形问题”。 6. ** Actors模型**:Scala内置对Akka框架的支持,提供了一种基于Actors...

    scala-2.7.5.final

    这些文档可以帮助开发者快速上手,了解如何使用各种函数、类和特质,以及如何利用Scala的特性进行高效编程。 "installer.jar" 文件很可能是Scala的安装程序,这个JAR(Java Archive)文件使得用户能够在自己的...

    Scala函数式编程.pdf

    函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala是一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式...

    scala + mybatis 数据库查询

    通过以上步骤,我们可以高效地利用Scala和MyBatis实现数据库查询。这种结合不仅保持了Scala的优雅和强大,还充分利用了MyBatis的便利性。在实际项目中,这种集成方式能够帮助开发者快速开发出稳定、高性能的数据访问...

Global site tag (gtag.js) - Google Analytics