Serializable Solution

  • 11
  • Недоступна
У нас есть класс Solution, идем его сериализовать. Подумайте, какие поля не нужно сериализовать, пометь ненужные поля модификатором transient. Объект всегда должен содержать актуальные итоговые данные.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (85)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Igor25 уровень, Санкт-Петербург
24 января, 09:03
Модификатор transient действует только на стандартный механизм сериализации Serializable. При использовании Externalizable никто не мешает сериализовать это поле. http://java-online.ru/blog-serialization.xhtml
Igor25 уровень, Санкт-Петербург
15 января, 10:57
Подскажите, когда загружаем объект , loadedObject ( Date , pattern ,temmperature transient) каким образом присваивается значение temperature к loadedObject ? почему оно не 0? ведь transient поля должны стать значениями по умолчанию ? ------------------ Это значит что из данной строки вытаскиваются все значения string = "Today is %s, and the current temperature is %s C"; this.string = String.format(string, format.format(currentDate), temperature); но как ???
Тот кто в танке24 уровень, Ярославль
22 января, 10:16
а оно не вытаскивается, в файл пишется только лишь строка, в которую температура забита. При попытке посмотреть поле temperature увидите 0.
Igor25 уровень, Санкт-Петербург
22 января, 12:38
System.out.println(savedObject.temperature == loadedObject.temperature); true
Тот кто в танке24 уровень, Ярославль
22 января, 14:01
у меня с такой же строкой false. Можете код в личку бросить поглядеть?
Igor25 уровень, Санкт-Петербург
24 января, 09:01
Модификатор transient действует только на стандартный механизм сериализации Serializable. При использовании Externalizable никто не мешает сериализовать это поле. http://java-online.ru/blog-serialization.xhtml
KN24 уровень, Москва
9 января, 13:27
Каждый раз, когда вижу в условиях "Подумай, что надо сделать/какой модификатор поставить и пр." , отключаю логику, чтоб не сломалась и сразу иду в требования. И даже не пытайтесь понять, в чем актуальность строки по отношению исходным значениям)
Александр Мирошниченко26 уровень, Харьков
7 января, 17:35
Одно осталось непонятным: "3) записать в поток на запись savedObject (убедитесь, что они там действительно есть);" Там (где?) они (кто?) В чём нужно убедиться? И "4) создать другой экземпляр класса Solution с другим параметром;" - с какой целью, для чего?
Полина22 уровень
19 декабря 2019, 12:02
Поле temperature должно быть отмечено модификатором transient. Поле currentDate должно быть отмечено модификатором transient. ...... Объясните, почему??
Bargu3in25 уровень, Иркутск
29 декабря 2019, 12:59
Здравствуйте. Вероятнее всего из-за того, что эта информация нам уже в принципе не нужна. Вся значимая информация уже сохранена в поле string - в какой день какая была температура.
Александр Мирошниченко26 уровень, Харьков
7 января, 16:34
Возможно и так, но... Что если дальше в программе будет обращение к полям этого объекта? К примеру, актуальной будет дата создания объекта или температура в момент создания объекта. Эта информация действительно есть в переменной string, но в этой переменной информация находится в таком виде, который сможет прочитать человек, но в таком виде те данные невозможно будет использовать в коде программы. Мутное требование - действительно, почему это поля currentDate и temperature должны быть отмечены модификатором transient, то же касается и переменой pattern.
Verter23 уровень, Дрогобич
7 января, 23:54
Наверное етот клас так задуман. Штоби к етим полям не обращались после инитиализации в конструкторе. Ведь програми бивают разние
Александр Мирошниченко26 уровень, Харьков
8 января, 07:28
Я разобрался. Там первые три поля - privat. К ним никто никогда извне обратиться не сможет. Доступна только string.
Полина22 уровень
8 января, 09:11
В комментарии Константина (6 августа 2019, 12:09) есть ответ на этот вопрос
Павел28 уровень, Санкт-Петербург
9 августа 2019, 19:20
скажите пожалуйста, почему во втором инстансе(экземпляре) класса у нас параметр темный? то есть действующий только первый инстанс? http://prntscr.com/oqocfj
LuneFox23 уровень, Москва
17 октября 2019, 13:15
Просто написано бессмысленно. Температура у нас временно используется только в конструкторе, и в принципе, как поле класса не нужна.
Константин22 уровень, Москва
6 августа 2019, 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 августа 2019, 19:22
ну да, таки и есть, вiйди разбiйник p.s Зеленский
Islam Laipanov24 уровень, Москва
30 ноября 2019, 20:54
жестко(
Vladislav Vasilyev26 уровень, Санкт-Петербург
вчера, 12:01
логично :)
Андрей Кутиль26 уровень, Киев
1 августа 2019, 22:24
мда, все наоборот
Самуил Олегович41 уровень, Киев
13 июля 2019, 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 июля 2019, 15:37
там чуть выше написанно: "Метод main не участвует в тестировании." то есть это чисто для себя, для своего понимания как оно работает + еще раз набить руку, так сказать.
Islam Laipanov24 уровень, Москва
30 ноября 2019, 20:54
валидатор жгет
Vladimir Tsyuman29 уровень, Красноярск
6 июля 2019, 11:04
Смешно...