java中的常量vs属性

Sub*_*osh 1 java properties constants

在我的java程序中声明常量值的最佳方法是什么?

它是在.properties文件中声明常量值或在不同类中将该值声明为静态final的最佳方法吗?

Ami*_*wal 5

如果这些值不是环境即dev,qa,stage特定的并且在代码的整个生命周期中都不会更改,则在代码中将它们声明为静态final .

常量的缺点是你需要重新编译它们,如果你对它们做了一些改变,这在属性中不是这种情况,但如果它是一个常数,它根本不应该改变.

例如: - 您的dev/qa/stage/prod环境中的用户名"admin"可能具有不同的凭据.

然后,您可以定义管理员用户,public static final String userId="admin"但要从属性文件中提供密码,并根据运行代码的环境进行更改.

喜欢

dev.properties admin.password = 123456.

qa.properties admin.password = abcdef.

然后根据您的环境从属性文件中读取这些密码.


Mis*_*lon 5

问题的答案取决于你想要完成的事情.但它也存在误解.

属性文件

属性文件并不是常量的替代或替代.它们用于存储可配置的值,可以是ip,语言等.从文件加载常量会使常量失效.

常量

另一点是publis static final变量在java中不是一个好方法,首选方法是使用枚举器.(来自Effective Java,Item 30:使用枚举而不是int constatns).枚举会强制你以一种有意义的方式对常量进行分组,而一个充满随机公共常量的类只是糟糕的设计.Enum使您能够提供功能,例如检查,验证,将常量与多个对象相关联,并且可以用于开关.另一件事是枚举被编译,使它们更有效和类型安全.阅读本书,它以一种更好的方式解释它.

我认为最好的方法是考虑值是否会根据某些外部因素而改变,或者在完成开发后它将保持不变.

属性文件和对配置的全局访问

想象一下,您的属性文件中有一个ip,并且您希望能够从代码中的任何位置访问此值.您可以只读取该值并将其加载到公共静态最终变量中.

如果这样做,您将如何控制初始化值,或者配置的值是否正确?在这种情况下,您可以使用单例类模式(只能存在该类的一个实例),它加载文件并检查值是否正确.

它可以将值存储在私有静态最终变量中,并启用可以执行所需检查的getter,以确保该值是正确的.这使您可以全局访问变量并将逻辑分组到一个位置.

下次向文件添加值时,您只需要更新此类,并且不需要在代码中搜索它,以及检查是否正确.

注意

我不认为这个问题应该被低估.这是一个有效的问题,正在寻求建议.确实,这个问题没有具体的重点,需要一些具体的案例来更好地解释在每种情况下可以做些什么.

笔记2

许多人都说没有真正做某事的"最佳方式".我认为这是真的,但是如果你能从Joshua Bloch那里获得像Effetive Java这样的书籍,那么你应该阅读它们并向那些已经编码很长时间的人学习.