2012-01-14 105 views
3

说到在名称 - 值对中声明预定义的常量,我一直在'java.util.Properties','枚举'或单独的类与'公共静态最终'值。属性或枚举或静态最终

为了将来的参考,我需要一些关于采取哪种方法的指导。

谢谢!

+0

我个人有一个具有公共静态最终值的类文件。我觉得这很容易,我知道去哪里看。如果你开始把枚举或任何东西放在特定的类中,现在你必须记住它所在的类。就性能而言,我不知道。我相信别人能够回答这个问题。 – 2012-01-14 19:24:24

回答

4

这一切都取决于你的恒定生命周期。 根据定义,常数是不动的。选择正确的方法将是可能发生变化和重新包装需求的问题。

  • 如果你确定,它不会永远移动:static final是要走的路。 Pi,数学常数,这样的事情就是一个很好的例子。

  • 如果您认为存在潜在的变化,但需要简化代码操作并且不担心上升的兼容性,那么枚举就可以。我前段时间是为错误代码做的。

  • 如果您认为有潜在的变化,但您不希望此更改影响您的代码,则属性(使用资源包)是更好的选择。标签(翻译),初始设置等也是一个很好的例子。

+0

请在枚举用例中加入一些详细信息... – SlowAndSteady 2012-01-14 19:38:55

+1

@Raj将枚举用于常量集,例如在纸牌游戏中你有黑桃,俱乐部,红心\t和钻石。另一种情况可以支持文件类型PNG,GIF等,如果您添加更高版本的BMP,则不会有缺点,因为那样您将拥有包含与新实现相匹配的枚举的另一个API版本。 – stacker 2012-01-14 19:52:59

+0

非常全面的答案。 +1。 Raj:你还应该注意@Sean Reilly对我的回答的评论。 – 2012-01-14 19:55:23

2

static final字段用于不能形成一组确定的关闭选项,您可以从中选择变量的状态。相反,如果可以的话,你总是使用枚举。

现在,当您想要保存键值字典时,无论其属性如何,都可以使用属性类型对象或有时使用Map。

+5

如果您需要键值对,并且键是关闭选项集,那么请考虑使用java.util.EnumMap – 2012-01-14 19:36:00

+0

来组合枚举和地图方法。此外,请注意,如果您使用常量而非具有特定领域含义的封闭集合中的*真*值,则static final是更好的方法。另外,如果你只在你自己的类中使用常量,考虑将'public'修饰符改为'private'。 – 2012-01-14 19:38:25

0

还有一件事要考虑 - 这些字符串会在不同的版本中改变吗?即可能有法文版本,中文版本,“高级”版本?如果是这样,Properties/ResourceBundles等是要走的路。

0

当您的一组常量固定并且预计不会经常更改时使用枚举。如果它经常发生变化,那么很难保持与以前版本的向后兼容性。如果在客户端服务器体系结构中都有一些Enum的不同版本。 E.g

服务器:public enum Priority{ HIGH,LOW,MEDIUM,AVERAGE}

客户:public enum Priority{ HIGH,LOW,MEDIUM}

如果让服务器发送Priority.AVERAGE到客户端,然后客户端会抛出异常的说。