У меня есть набор объектов модели и набор объектов-оболочек для придания им дополнительной функциональности.
Я бы хотел иметь возможность кратко преобразовывать коллекции объектов-моделей в объекты-обертки, используя те же сокращения.это позволяет вам написать List("x", "y", "z").foreach(println)
, например:
class Model
class ModelWrapper(val m: Model)
object ModelWrapper { def apply(model: Model) = new ModelWrapper(model) }
val m1 = new Model; val m2 = new Model; val m3 = new Model
List(m1, m2, m3).map(ModelWrapper)
, чтобы ModelWrapper
, переданный в качестве аргумента, был преобразован в ModelWrapper(_)
, вызов объекта-компаньона.
Однако, когда я пытаюсь это сделать, я получаю ошибку несоответствия типов, подобную этой:
<console>:14: error: type mismatch;
found : ModelWrapper.type (with underlying type object ModelWrapper)
required: Model => ?
List(m1, m2, m3).map(ModelWrapper)
Однако , если я сделаю ModelWrapper
a case class
и удалю собеседникаобъект, это работает.Я не хочу превращать его в класс case, поскольку добавляемое им поведение не вписывается в общий подход к классам case.Например, два класса-обертки с одним и тем же классом модели в качестве параметра не обязательно равны.
Что я хотел бы знать, в чем заключается разница между классом случая и объектом-компаньоном в этом случае?Могу ли я получить то, что я хочу, без использования класса case?