我试图了解 java.util.prefs.Preferences
的不同构造函数是如何工作的,但不确定在不同场景下使用哪些构造函数。
一方面, Preferences
是否将首选项/属性保存到文件中? 换句话说,我可以使用这个类在我的应用程序运行中存储首选项,还是所有内容都保存在内存中?
至于构造函数,只有几种方法可以实例化 Preferences
:
Preferences p = new Preferences();
Preferences p = Preferences.userNodeForPackage(this.getClass());
Preferences p = Preferences.userRoot();
这些构造函数的 API docs 如下(分别):所以我想我对不同
Preferences
实例、Java 类( useNodeForPackage(Class<?>)
???)和最终用户之间的关系感到困惑。所以我问: 每个构造函数/工厂方法与其他方法有何不同,以及何时使用它们? 提前致谢!
最佳答案
“一方面,首选项是否将首选项/属性保存到文件中?”
是的,数据是持久的。不,它不一定将它们写入文件。存储方法是实现定义的,它可以将它们存储在远程数据库、注册表或二进制文件附带的实际文件中。在 Windows 上,默认实现写入注册表。 (这是写在您链接的 API 文档的顶部)
“每个构造函数/工厂方法的作用与其他方法有何不同,以及何时使用它们?”
Preferences p = new Preferences();
这不能像@ojota84 在他们的帖子中提到的那样直接调用,它被下面的工厂方法使用:
Preferences p = Preferences.userNodeForPackage(this.getClass());
这允许
Preferences
实现返回一个特定于给定类的 Preferences
对象,并且不会干扰其他类的首选项。在 Windows 上,这通常会返回一个 Preferences
对象,该对象将 key 存储到 HKU\Software\JavaSoft\Prefs\myapplication\myclass\
中。在 XML 支持的文件中,这可能对应于 <myapplication><myclass>-data here-</myclass></myapplication>
。Preferences p = Preferences.userRoot();
这与上面的类似,但返回所有用户首选项的根对象。如果您将偏好设置为一棵树。那么这是有道理的。在 Windows 上,这通常使用
HKU\Software\JavaSoft\Prefs\myapplication\
实现。 XML 类比是您将访问 <myapplication>-data here-</myapplication>
。在
userRoot()
和 userNodeForPackage()
之间进行选择本质上它是一个偏好问题(不是双关语)。如果您只需要存储一两个键,
userRoot()
将在您的注册表中创建更少的条目。如果您需要编写大量 key ,那么 userNodeForPackage()
可能会更好,因为您可以避免名称冲突和其他问题。您还可以在支持您的首选项的任何内容中获得更清晰的结构,无论是 XML 文件、数据库还是 Windows 注册表。关于Java util Preferences 构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16361188/