代码之家  ›  专栏  ›  技术社区  ›  jcrossley3

为属性键使用常量有什么意义?

  •  5
  • jcrossley3  · 技术社区  · 15 年前

    最近,我遇到了很多依赖于“属性文件”进行配置的Java代码。但代码使用常量(静态最终字符串)来检索属性值,而不是普通的旧字符串文本。

    我觉得这种额外的间接性很烦人,因为我需要表演 查找 要么 方向。如果从配置文件中观察到的属性开始,我必须首先搜索属性名才能找到Java常量,然后再次搜索以查找代码中常量的引用。如果从代码开始,我必须先找到常量的实际值,然后才能确定配置文件中属性的值!

    有什么意义?

    我了解使用常量引用资源包中的键的价值,通常是为了支持i18n。我指的是简单的、非用户界面的配置值。这个 只有 我能想到的原因是让以后更容易地更改属性名,但这一好处远小于imho的烦恼,特别是考虑到全球搜索和替换的便利性。

    5 回复  |  直到 15 年前
        1
  •  6
  •   ShuggyCoUk    15 年前

    如果一个值需要在不进行重新编译的情况下进行更改,则不可避免地需要进行一些重定向,但是如果不需要在多个位置引用该键,则执行另一个重定向是非常愚蠢的(这本身可能是关注点分离不良的迹象)。

    密钥字符串应该具有足够的描述性,使其不能与范围之外的其他字符串(通常是类)发生冲突,并且保持单个类中的文本唯一既不复杂,也不可能是如此严重的问题,以至于值得在单个块中声明它们。因此(IMO)这种做法只是一个人在不理解规则的原始意图的情况下,盲目地遵循规则。

    如果你需要引用另一条指导原则来证明这个放松的理由,我建议你亲吻。

        2
  •  11
  •   Ferdinand Beyer    15 年前

    首先,在使用常量时,如果没有得到编译器错误,就不能错误地键入键。

        3
  •  5
  •   Nick Fortescue    15 年前

    即使在简单的全局搜索和替换(这不是一件新鲜事)的日子里,使用一个常量也可以让您知道字符串只是用于该属性文件。这很好,因为:

    • 常量意味着输入错误将得到编译器错误,字符串将不会
    • 常量允许您将一个属性文件的键“id”与另一个XML文件的键“id”分开。相同的字符串,不同的含义。
    • 全局搜索和替换可能会破坏很多东西,而您的IDE会让您非常容易地搜索常量的所有用法,并且只更改相关的用法。

    在很多情况下,编程人员只是养成了一个好习惯,但是好习惯是有原因的。

        4
  •  0
  •   bpapa    15 年前

    我以前也见过这种做法,事实上,有一次我在一个项目中搜索一个常量文件,这个文件引导我找到一个XML文件,它最终会给出我要查找的属性名。然后我也必须查看属性文件,因为值是我真正想要的。

    我认为这是杰夫和乔尔谈论的事情的一个例子 the last podcasts ,在这种情况下,开发人员盲目地遵循他们听说过的一个实践(在本例中,该实践在代码中永远不会有字符串),而不考虑考虑考虑考虑到手头的问题是否真正合适。

        5
  •  0
  •   Pete Kirkham    15 年前

    因为自动完成在常量的标识符上工作得更好,但是如果你所有的键值都是“com.foo.bar.whatever”,你就不会得到任何反馈。