在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的地方使用。
建议使用哪种方法?为什么?
答案 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类中的值。)