Java final class with constant
Java final class with constant
我必须定义一个 class 它所做的只是保持常量。
public static final String CODE1 = "100";
public static final String CODE2 = "200";
现在我想在其他 classes 中使用这些值。将此 class 用作静态 class 还是实例化它更好?
谢谢。
注意:我知道枚举,但在这种情况下,我必须使用 class。
只是为了使用这些值,您当然不应该实例化 class。仅仅因为您可以 像访问实例成员一样访问静态成员并不意味着这是个好主意。
如果 class 真的只包含常量 - 如果你确定这是个好主意,而不是 classes 中出现的那些与它们直接相关的常量 - 你应该它是一个带有私有构造函数的 final
class,因此没有人 可以 毫无意义地实例化它:
public final class Codes {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
// Prevent instantiation
private Codes() {
}
}
Don 的回答建议使用枚举也是一个很好的主意 - 这意味着您可以在 API 中任何 不使用 的地方使用 Code
] 需要准确的字符串表示,这可以防止您意外使用非代码值。
Jons 的回答是正确的,尽管我想向您展示一个带有枚举的解决方案。
访问其字符串值有一个缺点,因为您必须调用 Code.CODE1.text()
而不是 Code.CODE1
.
public enum Code {
CODE1("100"), CODE2("200");
private String text;
Codes(String text) {
this.text = text;
}
public String text() {
return text;
}
}
java 语言规范和 JVM 规范允许您做任何您想做的事情,无论是实例化 class 还是使用 final 或使用其他方式....
只需使用 Eclipse 并尝试!
虽然有一些好的做法,但 Jon Skeet 的回答是一个很好的做法。
Java语言不支持全局变量
public class ComonFun {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
public static String CODE1(){
return CODE1;
}
public static String CODE2(){
return CODE2;
}
}
实施
public class Main {
public static void main(String[] args) {
System.out.println(ComonFun.CODE1());
System.out.println(ComonFun.CODE2());
}
}
我认为你只需要声明一个接口,你不需要指定子句"public static final"。并且可以通过大厅项目使用。
将它们作为静态使用,不要进行实例化。
甚至使用静态导入也有好处。
package coma;
import static coma.ImportStatments.*;
public class UsingClass {
public static void main(String[] args) {
System.out.println(CODE1);
}
}
带有 final 变量的 class 看起来像这样:
package coma;
public class ImportStatments {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
}
我必须定义一个 class 它所做的只是保持常量。
public static final String CODE1 = "100";
public static final String CODE2 = "200";
现在我想在其他 classes 中使用这些值。将此 class 用作静态 class 还是实例化它更好?
谢谢。
注意:我知道枚举,但在这种情况下,我必须使用 class。
只是为了使用这些值,您当然不应该实例化 class。仅仅因为您可以 像访问实例成员一样访问静态成员并不意味着这是个好主意。
如果 class 真的只包含常量 - 如果你确定这是个好主意,而不是 classes 中出现的那些与它们直接相关的常量 - 你应该它是一个带有私有构造函数的 final
class,因此没有人 可以 毫无意义地实例化它:
public final class Codes {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
// Prevent instantiation
private Codes() {
}
}
Don 的回答建议使用枚举也是一个很好的主意 - 这意味着您可以在 API 中任何 不使用 的地方使用 Code
] 需要准确的字符串表示,这可以防止您意外使用非代码值。
Jons 的回答是正确的,尽管我想向您展示一个带有枚举的解决方案。
访问其字符串值有一个缺点,因为您必须调用 Code.CODE1.text()
而不是 Code.CODE1
.
public enum Code {
CODE1("100"), CODE2("200");
private String text;
Codes(String text) {
this.text = text;
}
public String text() {
return text;
}
}
java 语言规范和 JVM 规范允许您做任何您想做的事情,无论是实例化 class 还是使用 final 或使用其他方式....
只需使用 Eclipse 并尝试!
虽然有一些好的做法,但 Jon Skeet 的回答是一个很好的做法。
Java语言不支持全局变量
public class ComonFun {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
public static String CODE1(){
return CODE1;
}
public static String CODE2(){
return CODE2;
}
}
实施
public class Main {
public static void main(String[] args) {
System.out.println(ComonFun.CODE1());
System.out.println(ComonFun.CODE2());
}
}
我认为你只需要声明一个接口,你不需要指定子句"public static final"。并且可以通过大厅项目使用。
将它们作为静态使用,不要进行实例化。
甚至使用静态导入也有好处。
package coma;
import static coma.ImportStatments.*;
public class UsingClass {
public static void main(String[] args) {
System.out.println(CODE1);
}
}
带有 final 变量的 class 看起来像这样:
package coma;
public class ImportStatments {
public static final String CODE1 = "100";
public static final String CODE2 = "200";
}