带有常量的Java final类

时间:2016-03-01 09:08:12

标签: java class oop static final

我必须定义一个类,它所做的就是保持常量。

public static final String CODE1 = "100";
public static final String CODE2 = "200";

现在我想在其他类中使用这些值。将此类用作静态类或实例化它会更好吗?

感谢。

注意:我知道枚举,但在这种情况下,我必须使用一个类。

5 个答案:

答案 0 :(得分:6)

只是要使用这些值,你当然不应该实例化该类。仅仅因为你可以访问静态成员就像它们是实例成员一样并不意味着它是个好主意。

如果类真的只包含常量 - 并且如果你确定这是一个好主意,而不是那些与它们直接相关的类中出现的常量 - 你应该把它变成一个私有的final类构造函数,以便没有一个可以无意义地实例化它:

public final class Codes {
    public static final String CODE1 = "100";
    public static final String CODE2 = "200";

    // Prevent instantiation
    private Codes() {
    }
}

Don的回答建议使用枚举也是一个非常好的主意 - 这意味着您可以在API中使用Code,而需要精确的字符串表示,这可以防止你不小心使用非代码值。

答案 1 :(得分:0)

java语言规范和JVM规范允许您执行任何您想要的操作,无论是实例化类还是使用final或使用其他方式....

只需使用Eclipse并尝试!

虽然有一些好的做法,但Jon Skeet的回答是一个很好的做法。

答案 2 :(得分:0)

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());
    }
}

答案 3 :(得分:0)

我认为您只需要声明一个界面,您不需要指定条款" public static final"。它可以用于大厅项目。

答案 4 :(得分:0)

将它们用作静态,不要进行实例化。

甚至使用静态导入作为一种好处。

package coma;

import static coma.ImportStatments.*;

public class UsingClass {
    public static void main(String[] args) {
        System.out.println(CODE1);
    }
}

带有最终变量的类看起来像这样:

package coma; 
public class ImportStatments {  
    public static final String CODE1 = "100";   
    public static final String CODE2 = "200"; 
}