Serializable Solution

  • 11
  • Недоступна
У нас есть класс Solution, идем его сериализовать. Подумайте, какие поля не нужно сериализовать, пометь ненужные поля модификатором transient. Объект всегда должен содержать актуальные итоговые данные.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (67)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Павел28 уровень, Санкт-Петербург
9 августа, 19:20
скажите пожалуйста, почему во втором инстансе(экземпляре) класса у нас параметр темный? то есть действующий только первый инстанс? http://prntscr.com/oqocfj
LuneFox23 уровень, Москва
17 октября, 13:15
Просто написано бессмысленно. Температура у нас временно используется только в конструкторе, и в принципе, как поле класса не нужна.
Константин22 уровень, Москва
6 августа, 09:09
С transient / без transient - работает одинаково. 1. Сначала просто подставил Serializable, transient нигде не ставил. 2. Как сказано в условии сделал проверочный main. 3. Создал savedObject - записал. Создал someObject другой объект. Восстановил loadedObject. Сравнил savedObject.string.equals(savedObject.string) --> true . 4. Подумал, может там миллисекунды убежали. Добавил в паттерн миллисекунд S. Нет - всё с точностью до миллисекунды равно. 5. Ну ладно, попробовал с transient как по условию - результат тот же, при дебаге смотрел объекты также сохраняются и восстанавливаются. С датами всё ок до миллисекунд. 6. А вот savedObject.equals(loadedObject) - всегда false (т.к. два одинаковых объекта лежат по разным адресам. На практике делают @Override equalse() - чтобы сравнить только поля двух разных объектов и было true на выходе. Теперь понял почему в задачах в начале 20 уровня переопределяли equalse()). C transient или без transient сравнение каждого поля по отдельности даёт true. 7. Валидатору конечно достаточно прописать всё согласно условия и всё ок. Но остался вопрос: - зачем здесь transient, если и без него всё восстанавливается отлично и при проверках работает одинаково? Минут через 10 пришёл ответ :) - в условии сказано - что объект должен содержать актуальные итоговые данные. Так вот - строка string это и есть итоговые данные. Её и сериализуем. Остальные поля можно сериализовать и результат будет одинаков. Но можно и не сериализовать пометив transient - дабы не потреблять зря ресурсы, ведь результат будет одинаков. То есть сериализуем необходимое.
Павел28 уровень, Санкт-Петербург
9 августа, 19:22
ну да, таки и есть, вiйди разбiйник p.s Зеленский
Islam Laipanov23 уровень, Москва
30 ноября, 20:54
жестко(
Андрей Кутиль25 уровень, Киев
1 августа, 22:24
мда, все наоборот
Самуил Олегович37 уровень, Киев
13 июля, 12:07
Я вот что-то вообще не понял юмора? Зачем это все ---- Написать код проверки самостоятельно в методе main: 1) создать файл, открыть поток на чтение (input stream) и на запись(output stream); 2) создать экземпляр класса Solution - savedObject; 3) записать в поток на запись savedObject (убедитесь, что они там действительно есть); 4) создать другой экземпляр класса Solution с другим параметром; 5) загрузить из потока на чтение объект - loadedObject; 6) проверить, что savedObject.string равна loadedObject.string; 7) обработать исключения. Ведь по сути дела просто проставить - transient - где надо и задача принята. Выше перечисленное делать вообще не надо. Это такой тонкий юмор или как? Поясните для жираФы плиз)))
Alexandr Vladyka25 уровень, Киев
25 июля, 15:37
там чуть выше написанно: "Метод main не участвует в тестировании." то есть это чисто для себя, для своего понимания как оно работает + еще раз набить руку, так сказать.
Islam Laipanov23 уровень, Москва
30 ноября, 20:54
валидатор жгет
Vladimir Tsyuman29 уровень, Красноярск
6 июля, 11:04
Смешно...
Intoxikot22 уровень, Челябинск
29 июня, 13:03
Не вижу логики. Поле string - составное (т.е. не несет уникальной информации и получается путем использования других полей), шаблон pattern имеет final значение. Логически, именно эти два поля должны быть transient. Информацию об объекте несут поля date и temperature. Именно их я бы и использовал в хеш-коде. Именно эти поля я бы использовал в сериализации.
Ivan34 уровень, Нижний Новгород
25 июля, 11:04
Я понимаю это так поля date и temperature несут всю информацию об объекте, но мы к ним никак не сможем обратиться и они по сути нужны только чтобы в конструкторе построить string и всё, их "польза для общества" исчерпана. Далее наше взаимодействие будет происходить только с string, поэтому зачем нам таскать лишний груз в виде date и temperature?
Anton Rymarenko31 уровень
27 июня, 13:38
не совсем я понял условие , ну да ладно .Сравнил строки с помощью компарту , убедился что равны ,запустил на проверку и забыл.
АртемGeek25 уровень, Москва
3 июня, 15:06
А вы знали, что ObjectOutputStream должен обязательно идти первее ObjectInputStream. иначе вылетает ошибка. EOFException
Alanser26 уровень, Кокшетау
10 июля, 05:03
Во, блин, а я не понимал что за...
Оно22 уровень
4 октября, 18:56
Но почему?..
John Doe24 уровень, Одесса
27 октября, 13:38
По идее пока OutputStream не отработает, файл не заполнен, следовательно InputStream нечего читать.
Артур24 уровень
27 апреля, 09:48
Странно получается. 1. Объявляем transient первые три поля, но у загруженного файла поле pattern имеет то же значение, что и savedObject, хотя должен быть null. 2. Если при десериализации не вызывается конструктор, то как инициализируется поле string?
Riccio35 уровень, Москва
15 мая, 20:14
Считанными данными.
Ivan Tyulpin32 уровень, Москва
22 августа, 21:15
поля transient после де-Сериализации принимают значения по умолчанию, а происходит в Reflection API, в этом случае конструктор для этого совсем не обязателен.
юрий шидловский23 уровень, Киев
24 марта, 03:04
с задачей какой-то глюк, временный файл создать нельзя-нет доступа, никакой проверки писать не надо, задача принимается просто добавлением transient-ность полей, поправьте плизз..