在Java中发布全局常量的更好方法是什么?

时间:2013-08-11 07:07:42

标签: java enums singleton global final

这些发布全局常量的方法中哪一个更好?致谢!!!

Method 1: final class with public static final fields

public final class CNST{
    private CNST(){}
    public static final String C1;
    public static final String C2;
    static{
       C1="STRING1";
       C2="STRING2";
    }
}
//so I could call C1, C2 like:
//...some code...
//System.out.println(CNST.C1);
//System.out.println(CNST.C2);

Method 2: singleton with enum

public enum CNST{
    INST;
    public final String C1;
    public final String C2;
    CNST{
       C1="STRING1";
       C2="STRING2";
    }
}
//so I could call C1, C2 like:
//...some code...
//System.out.println(CNST.INST.C1);
//System.out.println(CNST.INST.C2);

2 个答案:

答案 0 :(得分:1)

遵循更常见惯例的东西将是这样的:

public class MyAppConstants {
    public static final String C1 = "STRING1";
    public static final String C2 = "STRING2";
}

然后你可以像这样参考:

System.out.println(MyAppConstants.C1);

但是,如果我必须在两者之间选择,我猜我会选择第一个,因为枚举是误导性的,并没有帮助功能,也不会使代码更清晰。

答案 1 :(得分:0)

对于像我这样简短的甜蜜代码的粉丝,他们喜欢尽量减少代码中的字符数,如果你不需要像#一样的类名预先挂起常量名称34; MyGlobaConstants",您可以创建一个基本活动类,如MyBaseActivity,并从中扩展您的所有活动。就这样:

public abstract class MyBaseActivity extends Activity {

   public static final String SOME_GLOBAL_STRING = "some string";
   public static final int SOME_GLOBAL_INT = 360;

这样做还有其他好处,例如创建所有活动都可以使用的方法,这通常是一种很好的做法。