Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Сериализация. / 9 сообщений из 9, страница 1 из 1
14.10.2021, 10:08
    #40104310
Dika!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Разбираю первый пример из статьи http://www.skipy.ru/technics/serialization.html. Там вложенные классы static и все работет. Почему? Если сделать вложеные классы не static, то ошибка. Почему?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import java.io.*;

public class Soluton {
    public class A {
        protected A() { } //конструктор по-умолчанию
    }

    public class B extends A implements Serializable {
        public B() { }
    }

    public static void main(String[] args) throws IOException {

        Soluton sol = new Soluton();
        B b = sol.new B(); // если A, B static  и заменить на B b = new B()

        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(arrayOutputStream);

        oos.writeObject(b); //<-error java.io.NotSerializableException

    }
}
...
Рейтинг: 0 / 0
14.10.2021, 10:58
    #40104328
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
-
...
Рейтинг: 0 / 0
14.10.2021, 11:04
    #40104330
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Удалил.

P.S.
Могу ошибаться, а детально разбираться - лень.
...
Рейтинг: 0 / 0
14.10.2021, 11:15
    #40104332
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Подумал. Тут всё просто.
Статический вложенный класс полностью независим от объемлющего - это своеобразная эмуляция пространства имён.
Нестатический вложенный класс связан с объемлющим и обязан сериализовываться вместе с ним, но объемлющий класс не может быть сериализован в условиях вашего примера.
...
Рейтинг: 0 / 0
14.10.2021, 11:27
    #40104336
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Basil A. Sidorov,
По хорошему, надо вынести все из класса с main. Это жеж запускалка.
...
Рейтинг: 0 / 0
14.10.2021, 11:42
    #40104342
Dika!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Basil A. Sidorov, то есть, чтобы работало без static, надо в класс B добавить
Код: java
1.
private void writeObject(ObjectOutputStream out) throws IOException {}


в котором описать сериализацию класса Soluton?
...
Рейтинг: 0 / 0
14.10.2021, 12:21
    #40104348
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Вам зачем нестатический вложенный класс?
Чисто из принципа?
...
Рейтинг: 0 / 0
14.10.2021, 12:46
    #40104353
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Dika!
Basil A. Sidorov, то есть, чтобы работало без static, надо в класс B добавить
Код: java
1.
private void writeObject(ObjectOutputStream out) throws IOException {}


в котором описать сериализацию класса Soluton?


Вы неправильно поняли происходящее: вложенные static-классы в статьях/блогах и пр. пишут ради того, чтобы читатель смог сделать crtl+c, ctrl+v и запустить у тебя (хотя в вашем примере зачем-то пакеты лепят)
...
Рейтинг: 0 / 0
14.10.2021, 12:57
    #40104363
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация.
Да. Скорее всего так оно и есть. Экономят количество файлов.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сериализация. / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]