为数值定义java常量的更好方法
在java中,我们可以定义常量以避免出现幻数,例如列表大小、天数。 我的问题是关于在代码中重用为数字定义的常量 方法1: 我可以定义两个值都为30的常数为数值定义java常量的更好方法,java,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提供了更多信息,但必
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只是一个用英语写的数字,可以用于我们假设使用一个月和列出三十个大小的两个地方
建议采用哪种方法以及为什么?问题是您想要什么 你想要可读性和可重用性?拿第一个来说 你想要内存优化?采取第二种解决方案 为什么??想象一下,不管出于什么原因,明天一个月将有35天。对于第二个,你将不得不重新设计你的所有应用程序,对于第一个,你只需将30改为35
编辑:要清楚,第一个解决方案远不是最好的,毫无疑问,除非你处于一个非常。。。内存限制性开发…问题是你想要什么 你想要可读性和可重用性?拿第一个来说 你想要内存优化?采取第二种解决方案 为什么??想象一下,不管出于什么原因,明天一个月将有35天。对于第二个,你将不得不重新设计你的所有应用程序,对于第一个,你只需将30改为35
编辑:要清楚,第一个解决方案远不是最好的,毫无疑问,除非你处于一个非常。。。内存限制开发…如果您定义一个常量,如
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;
因为它们有不同的含义,即不同的语义。如果在您的第一个版本中,需求规定默认列表大小为一个月,您可以用
public static final int ONE_MONTH=30;
public static final int DEFAULT_LIST_SIZE=ONE_MONTH;
S.I没有考虑定义两个常量使用更多的内存,因为这是一个设计问题,一个或两个甚至更多的变量通常不会在java程序中使用内存方面产生这样的差异。
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;
因为它们有不同的含义,即不同的语义。如果在您的第一个版本中,需求规定默认列表大小为一个月,您可以用
public static final int ONE_MONTH=30;
public static final int DEFAULT_LIST_SIZE=ONE_MONTH;
S.I没有考虑定义两个常量使用更多的内存,因为这是一个设计问题,一个或两个甚至更多的变量通常不会在java程序中使用内存方面造成这样的差异。
< P>有一个替代方案,改变你的第二种方法,如下面的 维护一个常量类-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类中更改值。有一种替代方法,更改第二种方法,如下所示- 维护一个常量类-
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;
}
}
因此,通过这种方式,您可以实现代码重用性、代码可读性和可维护性。将来,如果月份的值发生了变化,如一个答案中所述,那么您只需要更改常量类中的值。第二个是所谓的优化,没有意义。请选择第一个。这一切都是关于可读性的。我几乎不会称之为少声明一两个变量的优化。这和直接使用30一样糟糕,因为如果你以后将值改为31,你的代码仍然到处都读30,你无论如何都会想改变它。第二个是所谓的优化,毫无意义。请选择第一个。这一切都是关于可读性的。我几乎不会称之为少声明一两个变量的优化。这和直接使用30一样糟糕,因为如果您稍后将值更改为31,代码仍然会在任何地方读取30,并且您仍然希望更改它。请参阅