【发布时间】:2019-11-19 11:44:21
【问题描述】:
假设我有以下内容:
case class TestField(value: String)
case class TestField2(value: String)
implicit class ProductExtensions[T <: Product](val value T) extends AnyVal {
def mapTo[R <: Product](implicit tGen: Generic.Aux[T, String :: HNil], rGen: Generic.Aux[R, String :: HNil]: R = ???
}
val testField2 = TestField("my value").mapTo[TestField2]
// TestField2("my value")
我能否“生成”mapTo 函数以适用于 String 以外的类型,而无需指定类型?
注意 TestField 和 TestField2 实现 AnyVal(我也不希望他们这样做),所以我不能使用 Unwrapped。
编辑
@Dmytro_Mitin 答案在我上面的示例中有效,但如果我将示例扩展到此:
implicit class ProductExtensions[T <: Product](val value T) extends AnyVal {
def mapTo[R <: Product](implicit tGen: Generic.Aux[T, String :: HNil], rGen: Generic.Aux[R, String :: HNil], o: OtherImplicit[String]): R = ???
}
...所以我正在寻找这个工作(但它没有):
implicit class ProductExtensions[T <: Product, U](val value T) extends AnyVal {
def mapTo[R <: Product](implicit tGen: Generic.Aux[T, U :: HNil], rGen: Generic.Aux[R, U :: HNil], o: OtherImplicit[U]): R = ???
}
有什么想法吗?
【问题讨论】: