Как работает сериализация в Java, если перед сериализацией объект выгружается? - PullRequest
1 голос
/ 23 октября 2011

Скажем, у меня есть интерфейс и объект:

public interface MyInterface {
    public String getStringOne();
}

public class MyObject implements MyInterface {
    private final String stringOne = "string1";
    private final Image myGiganticImage; // loads from disk in the constructor

    // Getters for both would follow
}

Что будет передано, если я выгружу MyObject в MyInterface перед его отправкой по проводам?

public class MyService {
    private final MyObject data = new MyObject();

    public MyInterface getData() {
        return data;
    }
}

В частности, делает myGiganticImage отправить по телеграфу?

Ответы [ 3 ]

5 голосов
/ 23 октября 2011

Очевидно, что состояние MyObject сериализовано.public MyInterface getData() только принудительно указывает, что тип, возвращаемый getData(), является -a MyInterface.

1 голос
/ 24 октября 2011

Upcasting не меняет содержимое объекта.

0 голосов
/ 21 апреля 2012

Upcasting - это просто способ изменить тип указателя.Одна и та же структура данных сохраняется в куче JVM независимо от типа указателя.Эта структура действительно не заботится о том, как вы на нее указываете.

Когда вы сериализуете объектную систему (вероятно), вы запросите у вашего объекта класс (getClass ()), а затем прочитаете все поля из этого класса, используя отражение.Объект всегда будет сообщать свой класс, даже если вы укажете на него, используя Object .

Система всегда будет читать поля из класса, потому что это единственный способ получить список полей в java: ask objectдля класса, а затем спросить класс для полей.

Если вы хотите передать родительский объект, вы можете попробовать мое решение: Десериализовать удаленный объект в самый узкий доступный класс

...