嗨,所以我有这个用例,我有一个函数,它采用一种扩展特征的类型 . 让我们说特征是:
trait A {
val a: Double
}
现在我有多个扩展a的case类 .
case class B(val a: Double) extends A
case class C(val a: Double, val b: Double) extends A
现在我想要一个广义的功能,例如:
def change[T <: A](newA: Double, state: T): T = {
state.copy(a = newA)
}
如果我可以指出通用T是一个扩展A的案例类,我可以推断出该状态有一个具有参数a的克隆方法 . 或者也许有一种方法可以定义一个泛型,它表示有一个克隆函数只有一个param是a .
谢谢
1 回答
Build 在cchantep的评论和similar question I have asked recently之后的作品:
是否有任何理由要求
change
返回特定类型而不仅仅是A
?如果没有这个要求可能会简单得多,我添加了递归类型只是为了满足这个要求(描述clone
总是返回原始类型):即使使用这个简单的实现,您也可以直接使用
clone
而不是change
,它仍然会静态保留派生类型 . 尽管如此,我认为这样的要求没有多大意义,并且在编译器知道它是B
或C
而不是A
的情况下,你可以直接使用复制,只有当你只有A
时才需要change
.