Я просто искал Google, чтобы узнать, как создать класс case с частным конструктором. Ниже правильный способ сделать это, как описано вcase class private constructor - need for readResolve реализация
How to override apply in a case class companion
object A {
def apply(s: String, i: Int): A =
new A(s.toUpperCase, i) {} //abstract class implementation intentionally empty
}
abstract case class A private[A] (s: String, i: Int) {
private def readResolve(): Object = //to ensure validation and possible singleton-ness, must override readResolve to use explicit companion object apply method
A.apply(s, i)
def copy(s: String = s, i: Int = i): A =
A.apply(s, i)
}
Ниже мое понимание до сих пор: -
Если мы объявляем случай класса аннотацию, то выполнение для копирования и применить метод не будет генерироваться компилятором.
Ниже вопрос, что я борюсь с: -
Почему требуется обеспечить выполнение readResolve?
Я автор ответа на другую тему, на которую вы изначально задали этот вопрос. Я следую лучшей практике JVM/Java, основанной на совете Джошуа Блоха в его книге «Эффективная Java, второе издание». Исходная статья: http://stackoverflow.com/a/25538287/501113 – chaotic3quilibrium
BTW, для более подробного контекста вокруг специфики JVM/Java метода readResolve и классов case, вот документ, который я написал (вместе с обновлением CodeReview), который углубляется вглубь в ПОЧЕМУ, я хотел, чтобы _allways предотвращали создание недействительных экземпляров класса case: https://docs.google.com/document/d/18SfBKHBUQ96dLYs-WyfzSKCFT6jrNF8FunMfCn55yMY/pub – chaotic3quilibrium