【发布时间】:2021-04-20 17:25:30
【问题描述】:
我正在尝试在方法中使用 Enumeration 对象。枚举对象从特征扩展而来,该方法将特征作为参数。这是示例代码。
sealed trait canAdd
object DAdder extends Enumeration with canAdd
{
type DAdder = Value
val P, Q = Value
}
class ClassTypeTest extends AnyFlatSpec with Matchers
{
class AClass
{
def add(v: canAdd) = if(v.isInstanceOf[DAdder]) println("Got DAdder") else println("Got IAdder")
def note(v: canAdd) = println("Got some canAdd trait object")
}
val aobj = new AClass
val aseq: Seq[DAdder] = Seq(DAdder.P, DAdder.Q, DAdder.P)
//*** Error in below line *****
aseq.foreach(aobj.add(_))
}
编译器给出以下错误:
Error:(23, 23) type mismatch;
found : x.x.DAdder.DAdder
(which expands to) x.x.DAdder.Value
required: x.x.canAdd
aseq.map(aobj.add(_))
我是否应该能够在将特征作为参数的方法中传递继承特征的对象?我该如何解决这个问题?
【问题讨论】:
-
DAdder对象本身是CanAdd,但枚举的元素不是。 -
使用
enumeratum来实现您的意图,枚举是有限且不鼓励的。 -
@MateuszKubuszok 我检查了这个 - 看起来不错。你能把这个作为回应吗?我会接受。谢谢!