JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Объясните почему не проходит.
Umar
41 уровень
  • 22.10.2018
  • 700просмотров
  • 1комментарий

Объясните почему не проходит.

Вопрос по задаче Как сериализовать Singleton?
Java Core,  10 уровень,  4 лекция
Обсуждается

Два десериализованных объекта singleton и singleton1 имеют разные ссылки в памяти, а должны иметь одинаковые.
Синглтоном (Singleton) называют класс, у которого экземпляр создаётся только один раз. Немного больше информации про синглтон можешь найти в статье.
В класс Singleton добавь приватный метод Object readResolve(), чтобы после десериализации ссылки на объекты были равны. Метод main не участвует в тестировании.

Требования:
  • Класс Solution.Singleton должен поддерживать интерфейс Serializable.
  • В классе Solution.Singleton должен быть реализован метод readResolve без параметров.
  • Метод readResolve должен возвращать синглтон (ourInstance).
  • Метод readResolve должен быть приватным.
  • В классе Solution должен быть публичный статический метод serializeSingletonInstance.
  • После десериализации ссылки на объекты должны быть равны.
package com.javarush.task.task20.task2008; import java.io.*; /* Как сериализовать Singleton? Два десериализованных объекта singleton и singleton1 имеют разные ссылки в памяти, а должны иметь одинаковые. В класс Singleton добавь один метод (погуглите), чтобы после десериализации ссылки на объекты были равны. Метод main не участвует в тестировании. */ public class Solution implements Serializable { public static void main(String[] args) throws IOException, ClassNotFoundException { Singleton instance = Singleton.getInstance(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); //Serializing the singleton instance ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream); oos.writeObject(instance); oos.close(); //Recreating the instance by reading the serialized object data add ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream); Singleton singleton = (Singleton) ois.readObject(); ois.close(); //Recreating the instance AGAIN by reading the serialized object data add byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream ois2 = new ObjectInputStream(byteArrayInputStream); Singleton singleton1 = (Singleton) ois2.readObject(); ois2.close(); //The singleton behavior has been broken System.out.println("Instance reference check : " + singleton.getInstance()); System.out.println("Instance reference check : " + singleton1.getInstance()); System.out.println("========================================================="); System.out.println("Object reference check : " + singleton); System.out.println("Object reference check : " + singleton1); } public static class Singleton implements Serializable { private static Singleton ourInstance; public static Singleton getInstance() { if (ourInstance == null) { ourInstance = new Singleton(); } return ourInstance; } private Singleton() { } private Object readResolve() throws ObjectStreamException { return getInstance(); } } }
0
Комментарии (1)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем DivertittoSenior Android-разработчи в United TechMaster
23 октября 2018, 11:18полезный
У тебя нет методов deserializeSingletonInstance и serializeSingletonInstance
+1
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush