在Java中将Child类设置为Non Serializable

我有一个实现Serializable的类。 现在我扩展了这个类,我希望这个扩展类不是Serializable。 那怎么办呢?

例如。 我有

class A implements Serializable. 

我有

 class B extends A. 

但我希望B类是Non Serializable。

正如其他人已经明确指出的那样, Serializable类的子类不可能是非Serializable

如果你想要的是子类的属性不被序列化,一个选择是使它们都是瞬态的。

如果您需要更多(您不希望序列化超类字段),请覆盖writeObject(ObjectOutputStream)readObject(ObjectInputStream)如下所述 – https://web.archive.org/web/20120626144013/http: //java.sun.com/developer/technicalArticles/ALT/serialization

您无法删除该界面,但可以在运行时阻止序列化:

 class B extends A { private void writeObject(ObjectOutputStream oos) throws IOException { throw new NotSerializableException(); } } 

这确实不可能。 你最好的选择是让B复合/装饰A.

 public class B { private A a = new A(); public void doSomething() { a.doSomething(); } } 

它将永远是Serializable,尽管你可以确保通过让每个成员transient化来对类中的任何内容进行序列化。

不可能。 Liskov替换原则和所有。

回答你的一条评论(假设你在谈论JPA或Hibernate):

但任何希望其对象被持久化的类都应该实现这一点。 我希望我的B级对象不可持久。

如果您不希望B持久存在,请不要将其标记为@Entity 。 但是如果B不是持久性实体恕我直言,那么B扩展A并没有多大意义。 这将是对inheritance的错误使用。

需要实现readObject()和writeObject()方法