在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()方法