&引用;程序到接口,而不是实现”;scala特征和案例类背景下的范式
在scala traits和case类的上下文中,我目前一直坚持“程序到接口,而不是实现”的范式。考虑下面的场景:&引用;程序到接口,而不是实现”;scala特征和案例类背景下的范式,scala,traits,case-class,Scala,Traits,Case Class,在scala traits和case类的上下文中,我目前一直坚持“程序到接口,而不是实现”的范式。考虑下面的场景: trait Foo { def bar: String } case class FooImpl(override val bar: String) extends Foo object Hello { def main(args: Array[String]) { val foo = new FooImpl("bar") doSomething(foo
trait Foo {
def bar: String
}
case class FooImpl(override val bar: String) extends Foo
object Hello {
def main(args: Array[String]) {
val foo = new FooImpl("bar")
doSomething(foo);
}
def doSomething(foo: Foo) = {
// how to use case class goodies of FooImpl here?
}
}
基本上,我的问题是:如何在上面的示例中使用case类的好东西,如模式匹配、复制等?
当然,我可以将
Foo
转换为FooImpl
,但这使得整个“程序到接口”方法毫无用处。我是否错过了这里显而易见的内容?谢谢你的回答,但这并不是我想要的。实际上,我不想在doSomething
中引用任何具体的实现。Foo
的所有实现都应该是可互换的,而不对doSomething
进行任何更改。然后将其放入Foo
?如果不是这样,那么你需要更具体一些。谢谢你的回答,但这不是我想要的。实际上,我不想在doSomething
中引用任何具体的实现。Foo
的所有实现都应该是可互换的,而不对doSomething
进行任何更改。然后将其放入Foo
?如果不是这样,那么你需要更具体一些。
def doSomething(foo: Foo) = foo match {
case FooImpl(x) => // whatever
case SomeOtherImplementor(x, y, z) => // whatever
}