我们的程序使用Preferences类存储用户设置,可通过Preferences.userNodeForPackage()
访问。我们刚刚完成了一个主要的重构,并发现所有用户设置都被遗忘在重构后,因为传递给userNodeForPackage()
的类是不同的。例如。而不是org.foo.MyClass
我们现在有org.foo.bar.MyClass
。
我想“导入”旧的偏好设置,这样我们的用户就不会注意到被遗忘的事情。如果需要,我可以手动将旧的Preferences对象中的单个键/值对复制到新的对象,但我必须能够首先获取旧的Preferences对象。如果没有旧班级的访问权限,我看不出这是怎么回事。
我错过了什么吗?我看到Preferences.node()
/ Preferences.nodeExists()
方法似乎很有希望,除了它们只对包含所需节点的现有首选项进行操作。因此,我们必须能够获得包含旧根节点的树,并且我们没有上述旧节点所在的类(重构点的一部分是对我们的层次结构进行去平化)。
我真的不会用虚拟文件污染我们干净的源代码,这样我们就可以访问旧的首选项了。你可以将包分配给在运行时生成的匿名类吗?或者是否有其他方法来获取特定包的Preferences对象,而不是传递该包的类?
提前致谢。
答案 0 :(得分:2)
RC使用Preferences.userRoot()
的评论是我所需要的 - 它使您成为整个“首选项”树的根,然后您可以使用Preferences.node()
遍历它以获得任何值你需要。谢谢,RC!