26

我对在 Java 中使用常量文件和属性文件有点困惑。

如何决定何时使用Constants.java以及何时使用.properties文件?

4

8 回答 8

33

当您不希望用户/部署人员/测试人员/测试更改它们时,请在 Java 代码中使用硬连线常量。

如果您确实希望这样做,请使用属性文件。

关键是更改应用程序源代码中的硬连线常量需要编辑源代码、重新构建和重新部署。相比之下,更改属性文件可能就像启动记事本一样简单。


你评论说:

正如您所说,更改属性文件很简单,而更改常量文件需要我们重新构建应用程序。那么,我们不应该总是更喜欢使用属性文件吗?

不,并非总是如此。 例如,如果您将应用程序分发给最终用户以安装在他们的机器上,并且它具有您不希望用户更改的常量,那么将它们放在属性文件中将是一个坏主意。

不可能将其简化为“始终偏爱 X”的建议。您需要了解自己的应用需求并自行决定。

于 2012-05-29T15:06:16.727 回答
5

我的清单

属性文件:

是否可以根据环境等进行配置?

消息、标签等

适用于特定情况(规则的状态列表等)。键值对。可由开发人员以外的其他人(即分析师、业务用户等)修改。

持续的:

是常数。不可配置。主要用于优化和重用。避免按键分散。

对于像 YES = "yes" 这样的常量。不是真正的关键价值。缓存键等

确保检索和设置使用相同键的常量,即使来自应用程序中的不同位置,EXAMPLE xyz.put(KeyConstants.SOME_KEY, "somevalue"); xyz.get(KeyConstants.SOME_KEY) 来自不同的类,当然 xyz 是共享的或单例的。

于 2012-05-29T20:20:30.867 回答
1
  • 常量- 当您不介意每次更改值时重新编译应用程序时。这里有点讽刺。如果它被称为常量,你为什么要改变它:)

  • 属性文件- 当您希望只更改值并可能重新启动应用程序以获取更改时。

于 2012-05-29T15:06:25.653 回答
1

通常,常量类中的任何内容都被认为是“硬编码”的;也就是说,您需要重新编译才能进行更改。

.properties文件用于配置之类的事情,您不必为了进行更改而被迫重新编译。这样,您可以简单地更改属性文件并重新启动您的应用程序。

于 2012-05-29T15:07:03.833 回答
1

当您要指定因部署而异或随时间变化的参数时,通常使用属性文件。

当参数不是动态的,因此不应该根据外部因素进行更改时,您可以使用常量。每次更改值时都必须重新编译该类。

于 2012-05-29T15:07:34.280 回答
1

有许多不同的方面需要考虑。最重要的是

  • 您可以编辑属性文件并使用它而无需重新编译您的应用程序;
  • 属性文件不包含任何代码,因此每个人都可以在没有任何 Java 知识的情况下更改它们。

这些方面使属性文件对于存储配置非常有用。

另一方面,常量类需要编译,但如果您不打算经常更改这些常量,则“更安全”。

于 2012-05-29T15:07:47.920 回答
1

常量在编译时是固定的。因此,如果您没有预见到值的任何变化,常量将是个好主意。

于 2012-05-29T15:11:14.157 回答
0

属性具有可外化的优点。您可以将一个属性文件用于开发,另一个用于测试,另一个用于生产。但是,很多时候,很少更改的属性是软件工作的内部属性,它们被放入属性文件中,这使得它们难以管理。

OTOH 常量被编译,因此任何错误都将在编译时被捕获。

所以答案是,这取决于。如果属性中的值是您想要外部化的真正配置更改,则使用属性文件。否则将它们设为 Java 常量。不过,您最终可能会同时使用两者。

于 2012-05-29T15:12:34.680 回答