如何使用ArrayList
存储HashMap
和/或java.util.properties
变量?如果不可能我可以用什么其他类来存储应用程序配置?
答案 0 :(得分:4)
如果您只是需要将您的馆藏序列化为字符串,我高度推荐XStream。它使用反射将类序列化为XML。如果默认行为对于您要序列化的类不起作用,则有文档,但是到目前为止,以下内容对我有用:
XStream xstream = new XStream();
String xml = xstream.toXML(myObject);
MyClass deserializedObject = (MyClass)xstream.fromXML(xml);
assert deserializedObject.equals(myObject);
答案 1 :(得分:2)
所以...如果“不这样做”对你不起作用,那么你需要以某种方式对数据进行编码。一种常见的技术是在每个元素的名称前面添加一些字符串。例如,如果我的地图MyMap包含a-> 1,b-> 2,c-> 3,我可能会存储在属性文件中:
MyMap.a=1
MyMap.b=2
MyMap.c=3
对于列表,您可以执行相同操作,只需将索引映射到值。因此,如果MyList包含{a,b,c}
MyList.0=a
MyList.1=b
MyList.2=c
这是一个黑客,其他人说的都是真的。但有时你必须做你必须做的事。
答案 2 :(得分:1)
Properties
基本上是Map<String, String>
,意味着key和value必须是String对象。如果你想要更高级的配置,你可以选择Spring。它是一个优秀的框架,我在每个项目中都使用它。 Spring配置文件非常灵活。
答案 3 :(得分:1)
java.util.Properties仅用于与String键和值一起使用。它确实从Hashtable继承了put()和putAll()方法,但使用它们来“欺骗”并不是一个好主意。您是否考虑过只将配置信息存储在HashMap而不是Properties对象中?您必须稍微自定义序列化,但在任何情况下您都必须这样做,因为您无法利用Properties类的默认加载功能。
答案 4 :(得分:1)
存储HashMap
会很容易,因为地图中的每个键和值都可以由Properties
对象中的相应键和值表示(请参阅setProperty
方法{ {1}}。
对于Properties
你可以做类似的事情,键是索引,值是相应索引中的项。
在这两种情况下,请记住属性文件只存储字符串,因此您必须设计一种方法来将对象中的键和值表示为字符串。