在Java中声明项目常量的正确方法是什么?

时间:2011-10-15 22:21:15

标签: java constants

对于Java开发人员来说,这似乎是一个愚蠢的问题,但是,我是Java的新手,我的背景来自低级别的c。 我曾经包含一个头文件,其中包含与我的项目相关的所有常量。 (通常是#define)。 我现在正在开发一个大型Java项目,并且我需要一些常量来实现全局(它们适用于多个类,并且在项目的各个部分中使用)

这让我很难决定把它放在哪里,我应该多次声明相同的常数,每个类一个?

很多框架,使用XML文件来声明常量&框架的定义(Hibernate,Log4J等)在我的项目中使用这种技术是明智的吗?如果是这样,怎么可以轻松完成?

2 个答案:

答案 0 :(得分:10)

与许多事情一样,有很多方法可以做到这一点。你应该做的一件事就是多次声明它们 - 这简直太愚蠢了。 :P

所有东西都必须在Java中,所以:

  1. 选择一个“主要”课程(假设我有一个名为“FTPServerApp”的项目 - 我可以将它们放在那里)
  2. 创建一个包含所有这些内容的“Util”类
  3. 当你弄清楚把它们放在哪里时,就这样声明它们:

    public static final [type] [NAME_IN_ALL_CAPS] = [value];
    

    这将

    • 随时随地(public
    • 将它们提供给您的所有项目代码
    • 该类的所有实例(static
    • 中只存在该值的一个副本
    • 无法更改(final)。

    由下划线分隔的ALL_CAPS_FOR_CONSTANT_NAMES是Java中的约定。

    所以,如果这是在一个名为FTPServerAPP的类中声明的,并且你有一个名为SERVICE_PORT的常量,它可能是:

    public class FTPServerApp {
      public static final int SERVICE_PORT = 21;
    
      ...
    }
    

    ...你可以从任何类中访问它,就像这样...

      FTPServerApp.SERVICE_PORT
    

答案 1 :(得分:1)

查看枚举类型(http://download.oracle.com/javase/tutorial/java/javaOO/enum.html)它们应该提供一种机制来提供常量而不定义具体的类(或具有所需常量的接口,这是人们使用的另一种选择)。

我发现另一种有用的技术(类似于上面给出的FTPServerApp示例)是为任何子系统/组件/等定义一个Context ...不仅包含该系统中组件所需的常量,而且可以保存任何表示您希望使其更加可见或不希望单个组件保持不变。我相信这是GoF模式中的一种,但是我已经看了那本书我已经很久不能确定了(而且我现在懒得看它!)