У меня есть абстрактный класс, который я расширяю и делаю множество классов случаев. Теперь я хочу скопировать экземпляры этих классов case, просто изменяя первый параметр, поэтому я использую метод класса case < copy
.
Так как я должен делать это для всех классов case, которые были расширены из общего абстрактного класса, а не для всех, я попытался сделать его общим и сделал абстрактным классом класс case.
Тогда Scala дает мне следующее:
класс case Осьминог имеет предки-предки-организмы, но наследование на случай болезни запрещено. Чтобы преодолеть это ограничение, используйте экстракторы для соответствия шаблону на нелистовых узлах.
Код:
abstract class Organism(legs: Int)
case class Octopus(override val legs: Int, weight: Double, ...)
case class Frog(override val legs: Int, ...)
def clone(o: Organism) = o.copy(legs = -1)
Это то, что я хочу сделать. Но если я не могу заставить метод clone
работать, тогда мне придется делать копирование как для Octopus
, так и Frog
.
Любые предложения, чтобы уменьшить эту многословие?