Почему Java нужен сериализуемый интерфейс?

Следующий ответ верен для более старых версий Chrome (& lt; 46). Для более поздних, пожалуйста, проверьте @ Chris-Hunt answer https://stackoverflow.com/a/38554505/422670

Я только что опубликовал очень похожий ответ на вопрос https://stackoverflow.com/a/11670319/422670

Как уже было сказано, невозможно отключить встроенную политику безопасности в расширениях v2 . unsafe-inline просто не работает намеренно.

На самом деле нет другого способа, чем перемещать все ваши javascript в js-файлы и указывать на них с помощью

9 ответов

Сериализация чревата ловушками. Автоматическая поддержка сериализации этой формы делает часть внутренностей класса общедоступного API (который является, почему javadoc дает Вам сохраненные формы классов ).

Для долгосрочной персистентности, класс должен быть в состоянии декодировать эту форму, которая ограничивает изменения, которые можно внести для классификации дизайна. Это повреждает инкапсуляцию.

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

существуют другие проблемы, такие как сериализированная форма внутренних классов, не являющихся четко определенным.

Создание всех сериализуемых классов усилило бы эти проблемы. Выезд Эффективный Java Второй Выпуск , в особенности Объект 74: Реализация, сериализуемая рассудительно .

115
ответ дан McDowell 5 November 2019 в 09:50
поделиться

Я думаю и Java и.Net люди поняли его превратно на этот раз, будут лучше сделать все сериализуемым по умолчанию и только должны отметить те классы, которые не могут быть безопасно сериализированы вместо этого.

, Например, в Smalltalk (язык, созданный в 70-х), каждый объект является сериализуемым по умолчанию. Я понятия не имею, почему дело обстоит не так в Java, рассматривая то, что подавляющее большинство объектов безопасно сериализировать и всего несколько из них не.

отмечание объекта как сериализуемый (с интерфейсом) волшебно не делает тот объект сериализуемым, это было сериализуемым все время , это просто, что теперь Вы выразили что-то, что система, возможно, нашла самостоятельно, таким образом, я не вижу очень хороших оснований для сериализации, являющейся способом, которым это теперь.

я думаю, что это было или плохое решение, принятое разработчиками или сериализация, была запоздалая мысль, или платформа никогда не была готова сделать сериализацию по умолчанию на всех объектах безопасно и последовательно.

31
ответ дан Pop Catalin 5 November 2019 в 09:50
поделиться

Не все является по-настоящему сериализуемым. Возьмите сетевое сокетное соединение, например. Вы могли сериализировать данные/состояние своего объекта сокета, но сущность активного соединения будет потеряна.

20
ответ дан Joel Coehoorn 5 November 2019 в 09:50
поделиться

Основная роль сериализуемых в Java должна на самом деле сделать, по умолчанию, все другие объекты несериализуемыми. Сериализация является очень опасным механизмом, особенно в его реализации по умолчанию. Следовательно, как дружба в C++, это прочь по умолчанию, даже если это стоит немногого для создания вещей сериализуемыми.

Сериализация добавляет ограничения и потенциальные проблемы, так как совместимость структуры не обеспечивается. Хорошо, что это прочь по умолчанию.

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

13
ответ дан Uri 5 November 2019 в 09:50
поделиться

Для некоторых классов, особенно те, которые представляют что-то более физическое как Файл, Сокет, Поток или соединение с БД, не имеет абсолютно никакого смысла сериализировать экземпляры. Для многих других Сериализация может быть проблематичной, потому что она уничтожает ограничения уникальности или просто вынуждает Вас иметь дело с экземплярами различных версий класса, который Вы не можете хотеть.

Возможно, возможно, было лучше сделать все сериализуемым по умолчанию и сделать классы несериализуемыми через ключевое слово или интерфейс маркера - но тогда, те, кто должен использовать ту опцию, вероятно, не думали бы об этом. Путем это, если необходимо реализовать сериализуемый, Вам скажет так Исключение.

9
ответ дан Michael Borgwardt 5 November 2019 в 09:50
поделиться

Ну, мой ответ - то, что это не ни на каком серьезном основании. И из Ваших комментариев I видят, что Вы уже изучили это. Другие языки счастливо пытаются сериализировать все, что не вскакивает на дерево после подсчета к 10. Объект должен принять значение по умолчанию, чтобы быть сериализуемым.

Так, то, что в основном необходимо сделать, читается все свойства стороннего класса сами. Или, если это - опция для Вас: декомпилируйте, поместите проклятое ключевое слово там и перекомпилируйте.

0
ответ дан nes1983 5 November 2019 в 09:50
поделиться

Я думаю, хотя должен был удостовериться Вы, как программист, знать что Ваш объект мой быть сериализированным.

4
ответ дан Milhous 5 November 2019 в 09:50
поделиться

Необходимость указать explicitely, что экземпляры определенного класса являются сериализуемыми язык, вынуждает Вас думать о том, если Вы необходимо позволить это. Для простого значения сериализация объектов тривиальна, но в более сложных случаях необходимо действительно продумать вещи.

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

Уникальность, ссылки на 'реальные' ресурсы, таймеры и много других типов артефактов НЕ являются кандидатами на сериализацию.

1
ответ дан Jeroen van Bergen 5 November 2019 в 09:50
поделиться

В Java есть некоторые вещи, которые просто не могут быть сериализованы, потому что они зависят от времени выполнения. Такие вещи, как потоки, потоки, время выполнения, и т.д., и даже некоторые классы графического интерфейса (которые связаны с базовой ОС) не могут быть сериализованным.

0
ответ дан 24 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: