Scala特征
来源:互联网 发布:真有外星人吗 知乎 编辑:程序博客网 时间:2024/05/29 06:45
- 定义特征
- 使用特征
- 子类型
特征用于在类之间共享接口和字段。类似于Java 8的接口。类和对象可以扩展特征,但是特征不能实例化,因此也没有参数。
定义特征
最简单的定义方法是trait
关键字加上一个标识符:
trait HairColor
特征作为泛型类型尤其有用,并且带有抽象方法。
trait Iterator[A] { def hasNext: Boolean def next(): A}
扩展trait Iterator[A]
需要提供类型A,并且要实现hasNext
和next
方法。
使用特征
使用extends
关键字扩展特征。然后使用override
关键字实现特征的任意抽象成员。
trait Iterator[A] { def hasNext: Boolean def next(): A}class IntIterator(to: Int) extends Iterator[Int] { private var current = 0 override def hasNext: Boolean = current < to override def next(): Int = { if (hasNext) { val t = current current += 1 t } else 0 }}val iterator = new IntIterator(10)iterator.next() // prints 0iterator.next() // prints 1
IntIterator
类有一个参数作为上边界值。扩展了Iterator[Int]
,next
方法必须返回Int类型的值。
子类型
可以在需要会用特征的地方使用其子类型。
import scala.collection.mutable.ArrayBuffertrait Pet { val name: String}class Cat(val name: String) extends Petclass Dog(val name: String) extends Petval dog = new Dog("Harry")val cat = new Cat("Sally")val animals = ArrayBuffer.empty[Pet]animals.append(dog)animals.append(cat)animals.foreach(pet => println(pet.name)) // Prints Harry Sally
trait Pet
有一个抽象字段name
,Cat
和Dog
在其构造函数中实现了。最后一行,调用了pet.name
,在特征Pet
的任意子类型中都必须实现。
0 0
- Scala特征
- scala编程--scala基础特征
- Scala Trait(特征)
- SCALA的特征 -(<scala编程思想>)
- Scala详解----------特征、模式匹配
- Spark-特征选择(scala)
- scala的可堆叠特征
- Scala:类,对象和特征(接口)
- 面向 Java 开发人员的 Scala 指南:关于特征和行为
- Scala基础教程(七):类和对象、特征
- 47.scala编程思想笔记——特征
- 54.scala编程思想笔记——使用特征
- scala--三种文本特征提取(TF-IDF/Word2Vec/CountVectorizer)及Spark MLlib调用实例(Scala/Java/python)
- Scala
- Scala
- scala
- scala
- Scala
- boost之并发编程
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- GDOI2017酱油记
- Linux 内核中逻辑地址/虚拟地址/线性地址三者的区别
- JDBC连接MySQL数据库小例子
- Scala特征
- 内存与cpu工作原理
- css实现强制不换行/自动换行/强制换行
- 剑指Offer——(5)用两个栈实现队列
- UVA 10382 Watering Grass 贪心
- 正则表达式使用总结
- 运维学习第十一天
- allocated fishing
- GDOI2017酱油记+对本赛季的一些分析