Java 透明地存储类状态而不公开实现

Java 透明地存储类状态而不公开实现,java,android,model-view-controller,serialization,Java,Android,Model View Controller,Serialization,我有一个模型(MVC)类,我想存储它的内部状态(基本上包含私有int字段) 该程序目前运行在Android上,因此我需要将其存储在捆绑包中,但稍后我将在桌面应用程序中使用相同的类,其中我必须以其他方式存储状态,因此我无法在类中直接引用捆绑包 所以我的问题是:在不公开类的实现的情况下,存储(和检索)类状态的最佳方法是什么 我能想到的最好办法是删除privateaccess修饰符,这样字段就可以被包访问,并在同一个包中创建读/写帮助器类,但这似乎有点错误 我不熟悉Android上的持久性机制,但一般

我有一个模型(MVC)类,我想存储它的内部状态(基本上包含私有
int
字段)

该程序目前运行在Android上,因此我需要将其存储在
捆绑包中
,但稍后我将在桌面应用程序中使用相同的类,其中我必须以其他方式存储状态,因此我无法在类中直接引用
捆绑包

所以我的问题是:在不公开类的实现的情况下,存储(和检索)类状态的最佳方法是什么


我能想到的最好办法是删除
private
access修饰符,这样字段就可以被包访问,并在同一个包中创建读/写帮助器类,但这似乎有点错误

我不熟悉Android上的持久性机制,但一般来说,最好将持久性逻辑(即存储对象状态的代码)与实际包含数据的域对象分开。例如,JPA和Java中几乎所有现代对象关系映射工具都采用了这种方法。因此,是的,直接在域类中引用
Bundle
对象听起来不是正确的策略,特别是如果您计划在非Android环境中使用相同的类

我的建议是将对象状态序列化为XML,它可以跨环境移植。有很多开源工具可以帮助实现这一点,并且不需要域类中的任何特殊代码。我最熟悉的两个是和。我不知道这两种方法是否适用于Android,但即使Android有自己的工具在XML之间转换对象,您仍然可以在桌面上使用JiBX或Castor,因为它们可以适应许多不同的XML格式


一旦您拥有XML格式的数据,您就可以使用在目标环境中最合适的任何方法来持久化它。在桌面应用程序中,这可能意味着用户主目录中的文件。在安卓系统上,我想应该是捆绑包,但这不是我的专业领域。祝你好运

还可以查看桥接模式:
正如Rob所说,您需要将持久性与数据对象分离,这样您就可以统一处理数据,并使用桥接器在不同的平台上处理持久性。

Bundle
基本上是一个
映射
,其中
对象
仅限于字符串、基本类型的对象形式和它们的数组。我可以将我的对象的XML表示存储在那里,这样就可以了。谢谢你的想法(也谢谢eMgz)!