-1

可能重复:
如何在 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

4 回答 4

4

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

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

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

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

于 2012-06-04T12:43:57.567 回答
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. 你应该阅读它们。

于 2012-06-04T12:42:59.037 回答
1

使用最终类

eg : public final class defines {

         // private constructor     
         private defines() {
         }
     }

常量应定义为

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

在这种情况下不建议使用枚举,因为当我们有常量之间存在某种关系时,应该使用枚举。

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

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

private static final <type> constantName = <value>;
于 2012-06-04T12:48:25.560 回答
0

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

public interface Const {

String GOVERNMENT = "Government";

String PUBLIC = "Public";

...

}

你也可以使用类。

于 2012-06-04T12:43:07.260 回答