解决方法
您可以使用
shapeless执行此操作:
import shapeless._ import shapeless.ops.hlist._ // Trims if passed a String value,otherwise returns the value unchanged object Trimmer extends Poly1 { implicit val stringTrim = at[String] { _.trim } implicit def noop[T] = at[T] { identity } } // Uses a Generic to transform the instance into an HList,maps over it // and convert it back into the case class def trimCaseClass[C,H <: HList](c: C) (implicit g: Generic.Aux[C,H],m: Mapper.Aux[Trimmer.type,H,H]): C = { val hlist = g.to(c) val trimmed = hlist.map(Trimmer) g.from(trimmed) }
然后:
scala> case class A(s1: String,s2: String,i: Int) defined class A scala> val a = A(" 1 ","2",3) a: A = A( 1,2,3) scala> trimCaseClass(a) res0: A = A(1,3)