2012-03-23 31 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

相关问题