类似于Class的标头,用于在Java中定义常量

时间:2012-06-04 12:36:28

标签: java

  

可能重复:
  How do you define a class of constants in Java?

我想在我的包中定义一个类,只包含像C中的定义一样的常量值。我是一个学习Java的C程序员,所以也许这就是为什么我仍然希望有一些像类这样的头文件:)

为此目的,这是我的课程:

package com.myclasses
public class defines{

public static byte final ID_1= 0x01;
public static final ID_2= 0x02;

public static String company_name="XYZ";


}

然后在同一个包中的另一个类中的某个地方,我使用这些定义如下:

byte idval = defines.ID_1;

... and so on.

我的问题是这样的“标题”类定义它的最佳方法是什么?

它只有静态变量,所以我应该定义类也是静态的吗?

访问修饰符怎么样?由于它已在其中定义,我认为它可以被“公开”。

请告知。

4 个答案:

答案 0 :(得分:4)

这种模式被称为“常数类”模式(我认为)。

使用它的一种方法是将其设为interfaceimplement,然后获取“免费”的参考:

public interface Defines {
    static byte final ID_1= 0x01;
    static final ID_2= 0x02;
    // etc
}

public class MyClass implements Defines {
    byte idval = ID_1; // Note: No need to refer to the class "Defines" here
}

但大多数人认为这是一种反模式,因为它不是真正的界面(它没有方法)。尽管如此,它还是很酷的,也可能是你轻松融入java的好方法。

“标准”方法是定义一个“实用程序类”,它只有静态字段和方法,给它一个私有构造函数来强化你不应该创建其中一个。这就是你所做的 - 继续这样做。

如果您有一些不同的“同一件事”值的常量,例如指南针上的方向等,请强烈考虑使用enum。你应该阅读它们。

答案 1 :(得分:4)

不要

几乎没有任何常数具有自己的价值。它们只在上下文中有意义。该上下文是一个真实的类,即具有实例(至少一个)的类。声明该类中的常量。

至于修饰符:尽可能缩小范围:Private如果仅在声明它们的类中使用,则公共,如果任何使用该类的人也需要常量。

如果在一个类中声明多个相同类型的常量,请考虑枚举是否更有意义。

是的,常数应该是静态的。

答案 2 :(得分:1)

使用最终成绩

eg : public final class defines {

         // private constructor     
         private defines() {
         }
     }

常量应定义为

public static final <type> constantName = <value>;

在这种情况下不推荐使用枚举,因为当我们有一些与它们之间存在某种关系的常量时,应该使用枚举。

拥有这样的实用程序类是我们在项目中使用的方法,用于定义需要跨项目访问的常量。

如果只需要在某个类中使用常量,那么在类本身中定义它们将是最佳解决方案。例如:

private static final <type> constantName = <value>;

答案 3 :(得分:0)

只需使用Java中的接口来定义所有常量..

public interface Const {

String GOVERNMENT = "Government";

String PUBLIC = "Public";

...

}

您也可以使用课程。