Объекты в Scala имеют закрытый конструктор, который нельзя вызывать с помощью new (поскольку он приватный), но все же можно вызывать с помощью отражения.
Под капотом объект доступен через статическое поле MODULE$
. Это поле является экземпляром синглтона, созданным внутри, путем вызова частного конструктора.
Пока вы обращаетесь к объекту в Scala или в коде Java с помощью MODULE$
, все будет в порядке. Однако вы не можете быть уверены, что какая-то библиотека не создаст дополнительный экземпляр вашего объекта с помощью частного конструктора, использующего отражение. В этом случае всякий раз, когда будет вызываться закрытый конструктор, будет создан новый экземпляр объекта и переназначен на MODULE$
.
Это может произойти, особенно если вы используете библиотеки Java, которые не знают о существовании объектов Scala.
Пожалуйста, проверьте эту статью для более подробной информации.
В любом случае, я бы просто создал собственный десериализатор для Джексона (аналогично решению, описанному в статье).