首页 > 解决方案 > 构造具有相同结构的多个案例类的单个函数

问题描述

问题:我有一些案例类,对于每个案例类,我必须运行一个返回相同案例类实例的简单函数。因此,对于每个案例类,我每次都必须实现相同的功能,即使功能具有相同的功能。是否有迭代案例类类型的 SCALA 方式。

object SampleCaseClasses {

  case class a(elem1: String, elem2: Int)

  case class b(elem3: String, elem4: Int)

  case class c(elem5: String, elem6: Int)

  case class d(elem7: String, elem8: Int)

  case class e(elem9: String, elem10: Int)

  case class f(elem10: String, elem12: Int)

  case class g(elem11: String, elem14: Int)

}

import SampleCaseClasses.{a, b}

def getProperAddress[a](host:String,port:Int): SampleCaseClasses.a ={
  a(host.toUpperCase,port+1)
}

def getProperAddress[b](host:String,port:Int): SampleCaseClasses.b ={
  b(host.toUpperCase,port+1)
}

标签: scala

解决方案


您可以将构造函数本身作为参数传递给getProperAddress

def getProperAddress[T](ctor: (String, Int) => T)(host: String, port: Int): T =
  ctor(host, port)

由于它们都是案例类,因此您可以这样做,这仅比创建多个方法的原始解决方案(Scastie)多几个字符:

getProperAddress(a)("foo", 0)

对于非案例类,你需要这样的东西:

getProperAddress(new NotCaseClass(_, _))("foo", 1)

推荐阅读