Serializable Solution

  • 11
  • Недоступна
У нас есть класс Solution, идем его сериализовать. Подумайте, какие поля не нужно сериализовать, пометь ненужные поля модификатором transient. Объект всегда должен содержать актуальные итоговые данные.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (61)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Павел22 уровень, Санкт-Петербург
9 августа, 19:20
скажите пожалуйста, почему во втором инстансе(экземпляре) класса у нас параметр темный? то есть действующий только первый инстанс? http://prntscr.com/oqocfj
Константин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 - дабы не потреблять зря ресурсы, ведь результат будет одинаков. То есть сериализуем необходимое.
Павел22 уровень, Санкт-Петербург
9 августа, 19:22
ну да, таки и есть, вiйди разбiйник p.s Зеленский
Андрей Кутиль23 уровень, Киев
1 августа, 22:24
мда, все наоборот
Самуил Олегович25 уровень, Киев
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 не участвует в тестировании." то есть это чисто для себя, для своего понимания как оно работает + еще раз набить руку, так сказать.
Vladimir Tsyuman26 уровень, Красноярск
6 июля, 11:04
Смешно...
Intoxikot22 уровень, Челябинск
29 июня, 13:03
Не вижу логики. Поле string - составное (т.е. не несет уникальной информации и получается путем использования других полей), шаблон pattern имеет final значение. Логически, именно эти два поля должны быть transient. Информацию об объекте несут поля date и temperature. Именно их я бы и использовал в хеш-коде. Именно эти поля я бы использовал в сериализации.
Ivan25 уровень, Нижний Новгород
25 июля, 11:04
Я понимаю это так поля date и temperature несут всю информацию об объекте, но мы к ним никак не сможем обратиться и они по сути нужны только чтобы в конструкторе построить string и всё, их "польза для общества" исчерпана. Далее наше взаимодействие будет происходить только с string, поэтому зачем нам таскать лишний груз в виде date и temperature?
Anton Rymarenko25 уровень
27 июня, 13:38
не совсем я понял условие , ну да ладно .Сравнил строки с помощью компарту , убедился что равны ,запустил на проверку и забыл.
АртемGeek25 уровень, Москва
3 июня, 15:06
А вы знали, что ObjectOutputStream должен обязательно идти первее ObjectInputStream. иначе вылетает ошибка. EOFException
Alanser26 уровень, Кокшетау
10 июля, 05:03
Во, блин, а я не понимал что за...
Артур24 уровень
27 апреля, 09:48
Странно получается. 1. Объявляем transient первые три поля, но у загруженного файла поле pattern имеет то же значение, что и savedObject, хотя должен быть null. 2. Если при десериализации не вызывается конструктор, то как инициализируется поле string?
Riccio35 уровень, Москва
15 мая, 20:14
Считанными данными.
юрий шидловский23 уровень, Киев
24 марта, 03:04
с задачей какой-то глюк, временный файл создать нельзя-нет доступа, никакой проверки писать не надо, задача принимается просто добавлением transient-ность полей, поправьте плизз..