如何解决对象类型和接受多种类型参数的方法的scala模式匹配
我想执行将某些对象作为参数的方法。我可以传递许多不同的对象。那里的对象有不同的类型(各种类的实例),但是它们都有共同的方法(方法A,方法B)。因此,我在定义类型时遇到问题,这是我目前作为示例所做的事情。任何人都可以帮助修复它?
sealed trait Foo
final case class A(a: SomeClass1Type) extends Foo
final case class B(b: SomeClass2Type) extends Foo
object SomeObject {
implicit val executionContext: ExecutionContext = ExecutionContext.Implicits.global
val caseMatcher = new SomeClass1
// val caseMatcher = new SomeClass2
execute(caseMatcher)
def execute(caseMatcher: Either[SomeClass1Type,SomeClass2Type]) = {
caseMatcher match {
case a: A(SomeClass1) => executeCase1(new SomeClass1)
case b: B(SomeClass2) => executeCase2(new SomeClass2)
}
}
def executeCase1(param: SomeClass1Type) {
val a = param.methodA
val b = param.methodB
}
def executeCase2(caseMatcher: SomeClass2Type) {
val a = param.methodA
val b = param.methodB
}
}
解决方法
似乎您需要structural-types:
def main(args: Array[String]): Unit = {
val c1 = SomeClass1(1)
val c2 = SomeClass1(2)
val result1 = process(c1) // 5
val result2 = process(c2) // 8
}
def process[T <: {def multiply: Int; def sum: Int} ](t: T): Int = t.multiply + t.sum
case class SomeClass1(int: Int) {
def multiply: Int = int * 2
def sum: Int = int + 2
}
case class SomeClass2(int: Int) {
def multiply: Int = int * 3
def sum: Int = int + 3
}
但是请注意,如果将其用于经常调用的代码段中,可能会导致性能严重下降。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。