为数值定义java常量的更好方法

时间:2015-07-07 08:59:10

标签: java

在java中,我们可以定义常量以避免幻数,例如清单大小,天数。 我的问题是重用代码中为数字定义的常量。

方法1: 我可以定义两个常量,它们都具有值30。

public static final int ONE_MONTH=30
public static final int LIST_SIZE_THIRTY=30

方法2: 我可以定义一个值为30的常量。

public static final int THIRTY=30

从java语法角度来看,两者都是正确的。虽然方法1提供了更多信息,但必须定义两个常量。方法2只是一个用英语写的数字,可以在我们假设使用ONE_MONTH和LIST_SIZE_THIRTY的地方使用。

建议使用哪种方法?为什么?

3 个答案:

答案 0 :(得分:4)

你想要的是什么问题。

您想要可读性和可重用性吗?拿第一个。

您想要内存优化吗?采取第二种解决方案。

为什么呢?想象一下,明天将出于任何原因一个月内有35天。对于第二个,您必须重新编写所有应用程序,首先,您必须将30更改为35。

编辑:要明确,第一个解决方案是最好的,毫无疑问,除非你处于一个非常非常非常非常非常......内存限制的开发中...

答案 1 :(得分:0)

如果您定义一个常量,例如

public static final int LIST_SIZE_THIRTY=30

它与使用30完全相同,因为如果默认大小为20,则不建议以

结尾
public static final int LIST_SIZE_THIRTY=20

或创建一个新常量并替换旧常量。 你的常数应该是有意义的,即他们必须帮助谁阅读和维护代码(即使他/她是代码作者)

所以我的建议是这样的:

public static final int ONE_MONTH=30;
public static final int DEFAULT_LIST_SIZE=30;

因为它们具有不同的含义,即不同的语义。如果您在第一个版本中要求声明默认列表大小为one_month,则可以使用

来强调它
public static final int ONE_MONTH=30;
public static final int DEFAULT_LIST_SIZE=ONE_MONTH;

P.S。我没有考虑定义两个常量使用更多内存,因为这是一个设计问题,一个或两个(甚至更多)变量通常在Java程序中使用的内存方面没有这么大的差异

答案 2 :(得分:0)

有一种选择,改变你的第二种方法,如下所示 - 维护一个常量类 -

public class Constants{

public static final int NUMBER_THIRTY=30;
....
...  //rest of the class

}

然后,使用如下的枚举 -

imprort ...Constants;
 public enum EnumConstants {

        MONTH(Constants.NUMBER_THIRTY),
             LIST_SIZE_THIRTY(Constants.NUMBER_THIRTY);

        int value;

    private EnumConstants(int value) {
        this.value = value;
    }

    public int value() {
        return value;

    }

}

通过这种方式,您可以实现代码的可重用性,代码可读性和可维护性。 (将来,如果月份的值发生变化,如一个答案中所述,那么您只需要更改Constants类中的值。)