Создание Дочерних классов как Не сериализуемый в Java

У меня есть класс, который реализует сериализуемый. Теперь я расширяю этот класс, и я хочу, чтобы этот расширенный класс был не сериализуемым. Таким образом, как сделать это?

Например. Я имею

class A implements Serializable.

и я имею

class B extends A.

Но я хочу, чтобы класс B был Не сериализуемым.

17
задан nhahtdh 24 January 2015 в 14:31
поделиться

6 ответов

As others have made clear, it's not possible for a subclass of a Serializable class to be non-Serializable.

If what you want is for the subclass' attributes not to be serialized, one option is to make them all transient.

If you need more than that (you don't want super class fields to be serialized), override writeObject(ObjectOutputStream) and readObject(ObjectInputStream) as outlined here - https://web.archive.org/web/20120626144013/http://java.sun.com/developer/technicalArticles/ALT/serialization

14
ответ дан 30 November 2019 в 11:17
поделиться

You can't remove the interface, but you can prevent serialization at run-time:

class B extends A {
    private void writeObject(ObjectOutputStream oos) throws IOException {
        throw new NotSerializableException();
    }
}
16
ответ дан 30 November 2019 в 11:17
поделиться

Невозможно. Принцип замещения Лискова и все такое.

4
ответ дан 30 November 2019 в 11:17
поделиться

Это действительно невозможно. Лучше всего, если вы позволите B композитно декорировать A.

public class B {
    private A a = new A();

    public void doSomething() {
        a.doSomething();
    }
}
4
ответ дан 30 November 2019 в 11:17
поделиться

Отвечая на один из ваших комментариев (и предполагая, что вы говорите о JPA или Hibernate):

Но любой класс, который хочет, чтобы его объект сохранялся, должен реализовать это. и я хочу, чтобы объекты моего класса B были нестабильными.

Если вы вообще не хотите, чтобы B был постоянным, не помечайте его как @Entity . Но для B не имеет смысла расширять A, если B не является постоянным объектом IMHO. Это было бы плохим использованием наследования.

1
ответ дан 30 November 2019 в 11:17
поделиться

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

3
ответ дан 30 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: