【发布时间】:2021-02-05 18:58:14
【问题描述】:
我想执行接受某个对象作为参数的方法。我可以通过许多不同的对象。对象有不同的类型(各种类的实例),但它们都有共同的方法(methodA、methodB)。所以,我在定义类型时遇到了问题,这就是我目前所做的一个例子。谁能帮忙解决一下?
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
}
}
【问题讨论】:
-
Either不是联合类型 - 您需要匹配左或右。此外,方法重载在这里更容易实现。 -
我知道我不能使用 Either 但我在这里使用 Either 来显示我可以输入两种类型中的任何一种但我不知道如何解决它所以执行方法可以接受这两种类型中的任何一种我不知道应该在执行方法中为 caseMAtcher 参数设置什么类型以接受这两种类型中的任何一种,并且仍然能够访问 executeCase 中对象上的方法
-
@user 我需要匹配 Left[Type1, Type2] 或 Right[Type1, Type2] 但是执行方法中 caseMatcher 的类型应该是什么,因为显然我的 IDE 会抱怨。
-
你想实现Polymorphism希望链接有帮助。
标签: scala design-patterns types matching