在java中存储全局变量(如文件路径)的位置?

时间:2010-04-11 15:55:33

标签: java global-variables

在我的应用程序中,我使用了一些图标。我应该在哪里存储包含这些图标的目录的路径?

图标用于不同的类中,因此将它们存储在其中一个类中并不是真的有意义。

我读到全局变量是邪恶的,但使用仅包含Commons字段的类(例如public static final)来存储这个数据之王是否可以接受?在专业应用中使用了什么解决方案?

6 个答案:

答案 0 :(得分:7)

全局常量

正如其他人所说,全局常量与全局变量没有相同的负面含义。由于不受控制的修改,全局变量使程序难以调试和维护。全局常量(public static final)不会产生同样的问题

然而,面向对象是关于将代码绑定到其数据附近以增强可理解性和可维护性。您仍然需要在全局类中存储全局配置值与保持数据接近将使用它的代码之间找到适当的平衡。

这里也许值得提醒一下,因为编译器可能会内联一些常量,如果你改变一个常量值,你可能不得不重新编译和重新部署不仅仅包含常量的类。

外化值

您还询问了专业应用的功能。这些应用程序制作这些类型的值(如文件路径)可从外部配置,这种情况并不少见。这取决于值的变化可能性(即应用程序移动的可能性或您的代码将在另一个应用程序中使用的程度)以及使用新值重新编译和重新部署代码的方便性或简便性。如果您确实选择在外部配置某些值,您仍可能需要为代码中的这些项编码默认值。

以下是一些外部化这些值的方法,以及一些可以帮助您入门的链接。这当然不是一个详尽的清单:

答案 1 :(得分:4)

全局变量是邪恶的(因为它们几乎不可能弄清楚谁修改了什么),但常量并不邪恶。 public static final String字段很好,因为它们无法修改。

答案 2 :(得分:3)

我建议将它们(图标)与您的类文件一起包含在一个jar中,比如一个名为resources的文件夹,只有图标加载器需要知道jar中的资源文件夹名称。

答案 3 :(得分:2)

你指的是常数,而不是全局变量,所以不要担心它们是邪恶的 - 它们不是,因为它们不会改变。

  • 如果他们被一个班级使用 - 将他们安排在那个班级
  • 如果它们被一个包中的多个类使用 - 将它们放在一个特殊的类
  • 如果它们被多个类使用并且它们在逻辑上属于某个地方,则将它们放在那里。

请记住,如果这些“常量”实际上是可配置的,您最好将Configuration对象传递给需要它的方法。好吧,你可能在某个地方有静态,但从可测性的角度来看,必须注入它们/传递它们。

答案 4 :(得分:1)

全局变量与全局常量不同。全局变量不好的原因是因为它们可以在代码中的任何位置进行更改,并且很难跟踪由于全局变量未处于预期状态而导致的错误。全局常量将始终处于预期状态,因为它们永远不会被无意中更改。

答案 5 :(得分:0)

一般情况下,我会建议这个特殊情况是打包问题,不要将这些项作为文件系统上的文件引用,而是作为类路径中的元素引用,并通过类加载器加载它们。这需要在应用程序的类路径中设置它们的位置。

然后应该只有一个知道如何检索这些图标的类,所有其他代码都会询问该类所需的图标。