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"; 
}