【问题标题】:What's the proper way of declaring project constants in Java?在 Java 中声明项目常量的正确方法是什么?
【发布时间】:2011-10-15 22:21:15
【问题描述】:

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

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

很多框架,使用 XML 文件来声明框架的常量和定义(Hibernate、Log4J 等)。在我的项目中使用这种技术是否明智?如果是这样,如何轻松完成?

【问题讨论】:

    标签: java constants


    【解决方案1】:

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

    所有东西都必须在 Java 中的一个类中,所以:

    1. 选择一个“主”类(假设我有一个名为“FTPServerApp”的项目 - 我可以把它们放在那里)
    2. 创建一个包含所有这些的“Util”类

    当你弄清楚将它们放在哪里时,以这种方式声明它们:

    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
    

    【讨论】:

    • 我明白了,但是这个概念很乏味,就像错误使用了面向对象编程一样,类的成员应该代表类本身,而不是将自己导出为公共常量。它有效,但它闻起来很腥......
    • 我同意。没有什么比这更要说的了。由于您来自不同的语言,您的观点倾向于那个方向。完全自然。当我第一次创建一个只有常量(即没有实际数据或功能)的实用程序类时,我也有同样的感觉,但它就是这样做的。
    【解决方案2】:

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

    我发现另一种有用的技术(类似于上面给出的 FTPServerApp 示例)是为任何子系统/组件/等定义一个上下文......它不仅包含该系统中组件所需的常量,而且可以保存任何声明您想让更多可见或不希望单个组件保持。我相信这符合 GoF 模式之一,但我已经很久没有看过那本书了,我无法确定(我现在懒得去查了!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2019-05-09
      相关资源
      最近更新 更多