繁体   English   中英

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

[英]What's the proper way of declaring project constants in Java?

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

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

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

与许多事情一样,有很多方法可以做到。 有一件事你应该做的是多次宣称他们-那是太傻了。 :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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM