封装Java Preferences API

6
我曾经为我的应用程序编写了一个自定义首选项类。在我的下一个业余项目中,我想切换到首选项API。但是put和get函数需要一个默认值,我不想在源文件中分散默认值。即使我的项目很小,我也无法想象在整个源代码中更改默认值。你们如何使用这个API?我正在考虑将首选项API封装在另一个类中,但这样做有什么意义呢?因为它只是减轻了将文件保存到磁盘的负担,而使用序列化并不难。我是否误解了重点?
4个回答

2
您在这里混淆了几个概念。代码中给出的默认值应该是针对本地情况的“合理默认值”。如果您想要应用程序范围内的默认值,则需要一个偏好提供者,允许您挂钩默认首选项和叠加的用户首选项。这可能是一个值得一做的项目。
哦,而“合理默认值”是避免在不必要时进行配置但允许用户或打包人员在需要时提供更好值的绝佳方式。
@comment,我想我明白了。
通过“本地情况”,我指的是代码上下文。对于您的GUI,您需要一个显示值来表示线程正在使用的内容。因此,我会使用类似Worker.DEFAULT_TIMEOUT的东西。您的worker将在内部使用相同的值作为默认值。这样,当您设置worker的行为时,您将检索配置的值或worker的默认值。

2

1

您可以将默认值放在.preferences文件中,该文件与您的.jar文件捆绑在一起(或者在专门的类或接口中使用常量)。

我用它来处理窗口位置/大小、记住选择文件的默认文件夹、最近打开的文件等琐事。我可以想到一些有趣的事情,您可以通过首选项API“免费”获得:

  • 以操作系统推荐的方式执行操作;操作系统可能不允许您在应用程序文件夹中编写“设置文件”,用户不喜欢被问在磁盘上哪里保存设置,而您也不想为每个平台实现自定义逻辑
  • 您的数据会分别保存在每个操作系统用户中
  • 即使卸载(或升级)您的应用程序,也可以保留用户数据的方法
  • 不需要数据库或访问文件系统

此外,我不喜欢序列化,并且不建议将其用于此目的。序列化意味着您必须在应用程序的新版本中更改类时进行注意。


1

把所有默认值都放在一个类中,这样它们就不会散落在你的代码中了,这难道很难吗?

我最近在项目中使用了commons configuration。我也研究过Java Preferences API,但我更喜欢Commons项目的灵活性。而且你不需要指定默认值!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接