Java 如何使继承可序列化类的类永远不可序列化? 让我们考虑下面的代码: public class MyPanel extends JPanel { private long secretInfo = ... }
JPanel是可序列化的。然而,MyPanel永远不应该是可序列化的,因为它包含敏感信息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,但其敏感信息不会被序列化
此外,您可以考虑将敏感信息存储在单独的不可序列化类中的备选设计。
< 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,这是不安全的。