Подтвердить что ты не робот

Почему scala.Serializable не указывает какие-либо методы?

Поскольку язык Java требовал, чтобы все члены интерфейса были общедоступными, а оригинальные дизайнеры не хотели, чтобы "методы" java.io.Serializable были общедоступными, это было невозможно в Java.

Scala не имеет этого ограничения, но такие вещи, как readObject/writeObject, по-прежнему не указаны в признаке scala.Serializable.

Разве это не помогло бы разработчикам, потому что

  • у них была гарантия правильности их подписи.
  • это сделает доступ к этим методам менее привлекательным.

или я пропущу что-то важное?

4b9b3361

Ответ 1

или я пропущу что-то важное?

Да, да.

readObject/writeObject методы должны быть частными и НЕ переопределены, чтобы механизм работал правильно.

Они вызываются обратным образом (т.е. класс суперкласса- > ). Более того, вы хотите, чтобы метод оставался конфиденциальным, чтобы предотвратить неправильное использование (и явные вызовы)

Механизм Serializable предлагает и другие методы: например writeReplace + readResolve, которые обычно не используются в одном классе + readObjectNoData (что не так полезно).

Теперь, если вам нужен конкретный метод, взгляните на java.io.Externalizable. Он публикует свои методы, и его реализация переопределяет механизм сериализации по умолчанию.

Ответ 2

Отвечая на Java, но я бы предположил, что те же рассуждения относятся к Scala: Java не требует методов, помеченных Serializable для реализации любых методов; среда выполнения обеспечивает сам механизм сериализации. Поэтому интерфейс пуст. readObject и writeObject не являются частью Serializable не потому, что они не являются общедоступными, а потому, что объекты, полученные из Serializable, не нуждаются в их реализации.

Сериализуемый действительно не должен быть интерфейсом, но аннотацией (особенно потому, что класс, полученный из класса Serializable, может очень не быть Сериализуемым), но он был частью языка, прежде чем язык имел аннотации.

Ответ 3

В сериализации нет способов опубликования. Есть четыре метода, которые вы можете реализовать, но все они являются необязательными. Ваш вопрос не имеет смысла.