对象类型上的scala模式匹配和接受多种类型参数的方法

对象类型上的scala模式匹配和接受多种类型参数的方法,scala,design-patterns,types,matching,Scala,Design Patterns,Types,Matching,我想执行一个方法,它接受某个对象作为参数。我可以通过很多不同的物体。这些对象有不同的类型(不同类的实例),但它们都有公共方法(methodA、methodB)。因此,我在定义类型时遇到了问题,这就是我目前所做的示例。有人能帮忙修理吗 sealed trait Foo final case class A(a: SomeClass1Type) extends Foo final case class B(b: SomeClass2Type) extends Foo object SomeObj

我想执行一个方法,它接受某个对象作为参数。我可以通过很多不同的物体。这些对象有不同的类型(不同类的实例),但它们都有公共方法(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
  }
}
看来你需要:

def main(args:Array[String]):单位={
val c1=某些类别1(1)
val c2=某些类别1(2)
val result1=进程(c1)//5
val result2=过程(c2)//8
}
def流程[T您似乎需要:

def main(args:Array[String]):单位={
val c1=某些类别1(1)
val c2=某些类别1(2)
val result1=进程(c1)//5
val result2=过程(c2)//8
}

def过程[T
或者
不是联合类型-您需要匹配左或右。此外,方法重载在这里更容易实现。我知道我不能使用其中任何一种,但我在这里使用其中任何一种来显示我可以输入两种类型的eny,但我不知道如何解决它,因此execute方法可以接受这两种类型中的任何一种,我不知道应该使用哪种类型ld设置为execute方法中的caseMAtcher参数,以接受这两种类型中的任何一种,并且仍然能够访问executeCase@user我需要匹配左[Type1,Type2]或右[Type1,Type2]但是execute方法中caseMatcher的类型应该是什么,因为很明显我的IDE会抱怨。你想实现希望链接有帮助。
或者
不是联合类型-你需要匹配左或右。另外,方法重载在这里更容易实现。我知道我不能使用任何一个,但我在这里使用任何一个来显示我可以输入eny是两种类型,但我不知道如何解决它,因此execute方法可以接受这两种类型中的任何一种,我不知道应该在execute方法中设置caseMAtcher参数的类型,以接受这两种类型中的任何一种,并且仍然能够访问executeCase@user我需要匹配左[Type1,Type2]或者是正确的[Type1,Type2],但是execute方法中caseMatcher的类型应该是什么,因为很明显我的IDE会抱怨。你想要实现,希望链接能有所帮助。
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
  }