Пусть есть классы Fruit
, Orange
и Apple
.
abstract class Fruit
class Orange extends Fruit
class Apple extends Fruit
Теперь я хочу добавить write
] для обоих типов Orange
и Apple
. Используя шаблон типа , я могу сделать следующее:
trait Writer[T] {def write(t:T)}
implicit object AppleWriter extends Writer[Apple] {
def write(a:Apple) {println("I am an apple!")}
}
implicit object OrangeWriter extends Writer[Orange] {
def write(o:Orange) {println("I am an orange!")}
}
def write[T](t:T)(implicit w:Writer[T]){w.write(t)}
Итак, так хорошо, но что, если я хочу определить writeFruits
?
def writeFruits(fruits:List[Fruit]) {for (fruit <- fruits) write(fruit)}
Я хотел бы writeFruits
для вызова напишите [Apple]
или напишите [Orange]
для каждого фрукта
. Я вижу, что это не работает (и знаю почему), но возможно я все равно смогу реализовать writeFruits
.
Могу ли я как-нибудь реализовать writeFruits
?