Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止父类Java的序列化_Java_Serialization - Fatal编程技术网

防止父类Java的序列化

防止父类Java的序列化,java,serialization,Java,Serialization,有没有一种方法可以防止父类被序列化 当我们对子类进行序列化时,直到父类为止,都会执行序列化 我可以限制父类的序列化并序列化我正在处理的唯一子类吗 虽然在技术上可以单独微调每一级继承,甚至可以排除超类字段,但您可能想回到这里 基本上有两种情况: 超类没有任何字段/状态。那你就没有什么可排除的了 超类具有状态,由该类的字段表示 那么,您认为如何有意义地解决第二部分?您可以看到,当您允许反序列化而没有超类字段的数据时,这意味着您可能需要进行大量额外的测试。确保超类方法不会抛出异常——因为所有字段突然都

有没有一种方法可以防止父类被序列化

当我们对子类进行序列化时,直到父类为止,都会执行序列化


我可以限制父类的序列化并序列化我正在处理的唯一子类吗

虽然在技术上可以单独微调每一级继承,甚至可以排除超类字段,但您可能想回到这里

基本上有两种情况:

  • 超类没有任何字段/状态。那你就没有什么可排除的了
  • 超类具有状态,由该类的字段表示 那么,您认为如何有意义地解决第二部分?您可以看到,当您允许反序列化而没有超类字段的数据时,这意味着您可能需要进行大量额外的测试。确保超类方法不会抛出异常——因为所有字段突然都是null而不是初始化的

    换句话说,有可能“忽略”所有这些值——您正在创建行为完全不同的对象。你准备好处理所有这些影响了吗

    Meanung:跳过超类字段需要干扰序列化代码。这可能需要很多额外的测试工作。你得到了什么?运行时数据传输减少了几个字节

    除此之外:具有4个级别的固有层次结构的目的是什么?但是超级类状态在哪里是不相关的


    我的非回答:仔细考虑你的想法是否真的是最好的面向对象设计来解决潜在的需求。 虽然在技术上可以单独微调每一级继承,甚至可以排除超类字段,但您可能想回到这里

    基本上有两种情况:

  • 超类没有任何字段/状态。那你就没有什么可排除的了
  • 超类具有状态,由该类的字段表示 那么,您认为如何有意义地解决第二部分?您可以看到,当您允许反序列化而没有超类字段的数据时,这意味着您可能需要进行大量额外的测试。确保超类方法不会抛出异常——因为所有字段突然都是null而不是初始化的

    换句话说,有可能“忽略”所有这些值——您正在创建行为完全不同的对象。你准备好处理所有这些影响了吗

    Meanung:跳过超类字段需要干扰序列化代码。这可能需要很多额外的测试工作。你得到了什么?运行时数据传输减少了几个字节

    除此之外:具有4个级别的固有层次结构的目的是什么?但是超级类状态在哪里是不相关的

    我的非回答:仔细考虑你的想法是否真的是最好的面向对象设计来解决潜在的需求。 这是可能的。只需将类声明为
    implements Externalizable
    ,并在
    writeExternal()
    方法中准确地编写所需内容,注意不要序列化超类中的任何内容,并在
    readExternal()
    方法中准确地读取该内容

    或者,只需实现
    Serializable
    并提供自己的
    readObject()/writeObject()
    方法,再次注意不要从超类序列化任何内容,在这种情况下也不要调用
    defaultWriteObject()
    defaultReadObject()

    在这两种情况下,当前类数据的实际序列化完全取决于您。

    这是可能的。只需将类声明为
    implements Externalizable
    ,并在
    writeExternal()
    方法中准确地编写所需内容,注意不要序列化超类中的任何内容,并在
    readExternal()
    方法中准确地读取该内容

    或者,只需实现
    Serializable
    并提供自己的
    readObject()/writeObject()
    方法,再次注意不要从超类序列化任何内容,在这种情况下也不要调用
    defaultWriteObject()
    defaultReadObject()


    在这两种情况下,当前类数据的实际序列化完全取决于您。

    任何子类的实例都是通过先构造基类来构造的,所以想知道为什么您只想序列化子类而不想序列化基类?仅供参考:我重新表述了我的答案,以便更清楚地说明为什么我拒绝了您的想法。如果你觉得有帮助,请告诉我。任何子类的实例都是通过先构造基类来构造的,所以想知道为什么你只想序列化子类而不序列化基类?仅供参考:我重新表述了我的答案,以便更清楚地说明为什么我拒绝了你的想法。如果您觉得有用,请告诉我。我使用的子类的继承级别为4。因此,对于序列化,我只关心子类所持有的数据。我不想在序列化时转储子类的整个继承层次结构。请查看我的更新。但是再一次——你所要求的没有多大意义。除此之外,-4个祖先类本身就有一种不好的设计味道。同意。但我无法控制类的层次结构。我正在按照Stipulated设计进行操作,因为我需要一个子类。但是如果没有办法阻止父类序列化。让我回到绘图板上,我使用的子类的继承级别为4。因此,对于序列化,我只关心子类所持有的数据。我不想在序列化请查看我的更新。但是再一次——你所要求的没有多大意义。是