Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 如何使继承可序列化类的类永远不可序列化? 让我们考虑下面的代码: public class MyPanel extends JPanel { private long secretInfo = ... }_Java_Inheritance_Serializable - Fatal编程技术网

Java 如何使继承可序列化类的类永远不可序列化? 让我们考虑下面的代码: public class MyPanel extends JPanel { private long secretInfo = ... }

Java 如何使继承可序列化类的类永远不可序列化? 让我们考虑下面的代码: public class MyPanel extends JPanel { private long secretInfo = ... },java,inheritance,serializable,Java,Inheritance,Serializable,JPanel是可序列化的。然而,MyPanel永远不应该是可序列化的,因为它包含敏感信息 如何彻底取消/阻止JPanel继承的可序列化特性?您将不希望序列化的字段标记为: 您仍然可以序列化MyPanel,但其敏感信息不会被序列化 此外,您可以考虑将敏感信息存储在单独的不可序列化类中的备选设计。 < p>标记不希望序列化的字段: 您仍然可以序列化MyPanel,但其敏感信息不会被序列化 此外,您可以考虑将敏感信息存储在单独的不可序列化类中的备选设计。可以使用以下方法之一: public class

JPanel是可序列化的。然而,MyPanel永远不应该是可序列化的,因为它包含敏感信息


如何彻底取消/阻止JPanel继承的可序列化特性?

您将不希望序列化的字段标记为:

您仍然可以序列化MyPanel,但其敏感信息不会被序列化


此外,您可以考虑将敏感信息存储在单独的不可序列化类中的备选设计。

< p>标记不希望序列化的字段:

您仍然可以序列化MyPanel,但其敏感信息不会被序列化


此外,您可以考虑将敏感信息存储在单独的不可序列化类中的备选设计。

可以使用以下方法之一:

public class MyPanel extends JPanel {
    private long secretInfo = ...

    // refuse to be serialized!
    private void writeObject(ObjectOutputStream out) throws IOException {
        throw new IllegalStateException("MyPanel cannot be serialized");
    }
}


您可以使用以下方法之一:

public class MyPanel extends JPanel {
    private long secretInfo = ...

    // refuse to be serialized!
    private void writeObject(ObjectOutputStream out) throws IOException {
        throw new IllegalStateException("MyPanel cannot be serialized");
    }
}


不要扩展JPanel。问题解决了。请尝试以下方法:

class MyPanel {
    void doSomething();
    String getSomeValue();
    JPanel getDisplayComponent();
}

MyPanel在逻辑上表示应用程序中的一个面板,但对它扩展JPanel没有特殊要求。组合通常是一种更强大的关系。

不要扩展JPanel。问题解决了。请尝试以下方法:

class MyPanel {
    void doSomething();
    String getSomeValue();
    JPanel getDisplayComponent();
}

MyPanel在逻辑上表示应用程序中的一个面板,但对它扩展JPanel没有特殊要求。合成通常是一种更强大的关系。

没错,我可以,但黑客可以在潜在损坏的状态下禁用MyPanel,这是不安全的。没错,我可以,但黑客可以在潜在损坏的状态下禁用MyPanel,这是不安全的。