2012-03-23 68 views
0

我有一個JPanel處理一堆設置,我想保存並通過文件名加載。java對象可以序列化自己嗎?

似乎天生就是因爲面板已經存在,並且知道所有關於自身的加載和保存應由面板本身通過保存(字符串文件名)和加載(字符串文件名)連接到按鈕的操作處理。

然而所有的串行化和/或持久性的例子我發現需要把對象相關到串行化功能的外部監督者。

我可以簡單地使用類似的writeObject東西序列化面板對象(本),這=的readObject()或者是有沒有做到這一點,我已經不是正常搜索的標準呢?

+4

是的,您可以。但是你想嗎? MVC模式是有原因的。 – Jochen 2012-03-23 18:29:49

+0

我自由地承認這是C++推理,但應用程序設置適合MVC風格的分區看起來很奇怪。然而,我完全同意你在99%的其他應用程序中使用你。 – 2012-03-23 18:51:21

+0

有趣的一點,但是一旦你加載它們,設置在哪裏?如果你的應用程序必須以某種方式訪問​​它們,爲什麼你應該爲它加載一個(相對)重量級的JPanel,而不是隻加載一個模型類? – Jochen 2012-03-23 19:21:53

回答

2

我不知道我理解的問題完全,但所有的序列化邏輯肯定存在於對象的方法(一個對象的讀寫)。

在談到誰還會調用這些方法,這一切都取決於你的使用情況。序列化對象有幾個原因,例如:如果想要將對象通過線路傳遞給另一個JVM,或者希望在JVM重新啓動之間保持對象的狀態,或者其他任何使用情況(其中包括整個狀態對象的需要將在JVM其運行之外的保存。

在你的使用情況,能不能做到?是。這是一種很好的做法,也許不是。抽象是更好的,因爲如果您需要堅持JPanel無法訪問的其他對象呢?如果在序列化對象之前需要執行其他邏輯,該怎麼辦?如果需要訂購或其他您的JPanel無法處理的需求,該怎麼辦?

您可以瞭解更多關於Java序列化的信息here

+0

只是爲了解決這個問題:我已經把初始的快速和骯髒的類佈局轉換爲基於MVC原則的佈局,並且使我提出這個問題的摩擦消失了。對於Java團隊得分爲1,並感謝@Jochen – 2012-03-24 04:12:38

相關問題