В настоящее время я придерживаюсь парадигмы «программа для интерфейса, а не реализации» в контексте особенностей scala и классов case , Рассмотрим следующий сценарий:Парадигма «Программирование к интерфейсу, а не реализация» в контексте особенностей scala и классов 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);
}
def doSomething(foo: Foo) = {
// how to use case class goodies of FooImpl here?
}
}
В основном мой вопрос: Как использовать тематические лакомства класса, такие как сопоставление с образцом, копировать и т.д. в приведенном выше примере?
Конечно, я мог бы просто отличить Foo
до FooImpl
, но это делает бесполезным подход всей программы к интерфейсу. Я пропустил здесь очевидное?
Спасибо за ваш ответ, но это не совсем то, что я искал. На самом деле мне не нужны ссылки на конкретные реализации внутри 'doSomething'. Все реализации 'Foo' должны быть взаимозаменяемыми без каких-либо изменений в' doSomething'. – Roman
Затем положил его в 'Foo'? И если это не так, тогда вам нужно быть более конкретным. – MattPutnam