我想在我的包中定义一个类,只包含像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.
我的问题是这样的“标题”类定义它的最佳方法是什么?
它只有静态变量,所以我应该定义类也是静态的吗?
访问修饰符怎么样?由于它已在其中定义,我认为它可以被“公开”。
请告知。
答案 0 :(得分:4)
这种模式被称为“常数类”模式(我认为)。
使用它的一种方法是将其设为interface
和implement
,然后获取“免费”的参考:
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";
...
}
您也可以使用课程。