[英]How to make a class inheriting of serializable class not serializable ever?
讓我們考慮以下代碼:
public class MyPanel extends JPanel {
private long secretInfo = ...
}
JPanel
是可Serializable
的。 但是, MyPanel
永遠不應該是Serializable
,因為它包含敏感信息。
如何徹底取消/防止從JPanel
繼承的Serializable
方面?
您將不想序列化的字段標記為transient
:
private transient long secretInfo = ...
您仍然可以序列化MyPanel
,但它的敏感信息不會被序列化。
此外,您可以考慮另一種設計,其中敏感信息存儲在單獨的不可序列化 class 中。
您可以使用以下方法之一:
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 {
// flag the serialization mechanism to ignore
// sensitive information
private transient long secretInfo = ...
}
不要擴展 JPanel。 問題解決了。 嘗試這樣的事情:
class MyPanel {
void doSomething();
String getSomeValue();
JPanel getDisplayComponent();
}
MyPanel 在邏輯上表示您的應用程序中的一個面板,但對於擴展 JPanel 沒有特別的要求。 組合通常是一種更強大的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.