22.scala的复合类型

Posted 大数据群英萃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22.scala的复合类型相关的知识,希望对你有一定的参考价值。

有时需要表明一个对象的类型是其他几种类型的子类型。在 Scala 中,这可以表示成 复合类型,即多个类型的交集。

假设我们有两个特质 CloneableResetable

trait Cloneable extends java.lang.Cloneable { override def clone(): Cloneable = { super.clone().asInstanceOf[Cloneable] }}trait Resetable { def reset: Unit}

现在假设我们要编写一个方法 cloneAndReset,此方法接受一个对象,克隆它并重置原始对象:

def cloneAndReset(obj: ?): Cloneable = { val cloned = obj.clone() obj.reset cloned}

这里出现一个问题,参数 obj 的类型是什么。如果类型是 Cloneable 那么参数对象可以被克隆 clone,但不能重置 reset; 如果类型是 Resetable 我们可以重置 reset 它,但却没有克隆 clone 操作。为了避免在这种情况下进行类型转换,我们可以将 obj 的类型同时指定为 CloneableResetable。这种复合类型在 Scala 中写成:Cloneable with Resetable

以下是更新后的方法:

def cloneAndReset(obj: Cloneable with Resetable): Cloneable = {
}

复合类型可以由多个对象类型构成,这些对象类型可以有单个细化,用于缩短已有对象成员的签名。格式为:A with B with C ... { refinement }

关于使用细化的例子参考 通过混入(mixin)来组合类。

推荐阅读:





以上是关于22.scala的复合类型的主要内容,如果未能解决你的问题,请参考以下文章

复合(或引用)数据类型图解:及例题代码

类型系统的运算法则--代码阅读神器--类型关乎复合

Python 怎么用代码实现解"复杂的复合函数的值域"类型的数学题?

了解函数中的快速代码元组复合

Postgres 复合类型 drop cascade 仅删除依赖列

Java中具有不同数据类型的复合减法[重复]