我刚刚看到一个类(一个很大的API模块),其中有很多像
这样的东西readParamString(Object params, int index)
他们在那个班级有10个领域
final static int PARAM1 = 1
...
final static int PARAM10 = 10
与readParam函数一起使用
但您也可以使用普通的int readParamString(o, 1);
是最终的静态int,比使用普通的int更好吗?
答案 0 :(得分:15)
声明静态最终常量的一个优点是防止在代码中多次引用相同的文字值,这可能会导致不必要的变化;例如如果程序员无意中更改了一个文字而没有改变其他文字。
在您的示例中,我将询问使用值1声明常量PARAM1的值,尤其是如果它对包含类是私有的并且仅引用一次。但是,如果字面值有一些语义含义,那么它可能会更有用; e.g。
public static final int LOAD_ACTION = 1;
public static final int SAVE_ACTION = 2;
public static final int DELETE_ACTION = 4;
public static final int MOVE_ACTION = 8;
但是,通常会使用枚举代替此方法。
答案 1 :(得分:9)
那太傻了。
提取数字常量的原因是为它们提供一个有说服力的名称。 PARAM1..PARAM10不是很有说服力。
答案 2 :(得分:4)
在你给出的例子中,我会说拥有命名值并不比直接使用int更好。参数是一个计数,因此参数的int表示与命名版本一样具有描述性。
这似乎有点像偶尔遇到类似
之类的C代码#define ZERO 0
#define ONE 1
真的没什么意义。事实上,当我看到使用这些名称时(而不是在我看到定义时),我很想跳到定义以确保名称不是说谎(这是很长很长一段时间,但是,我实际上遇到过将FALSE定义为1,-1或非零的代码,例如,这真的非常糟糕。
编辑:第二次看,似乎名称可能指示第一个参数中哪个字段是感兴趣的,在这种情况下名称可能更有意义 - 只要名称与字段有一些有意义的联系而不是而不仅仅是数字偏移。很难说是否是这种情况,因为你可能会解释你正在使用的代码。
答案 3 :(得分:1)
是的,比使用普通的int
更好但是如果您使用的是Java 5或更高版本enum
优于final static
变量。
答案 4 :(得分:1)
通过声明final static int,您将对int变量有一个引用。另一个更重要的是,一旦声明为final,就无法更改int的值。 如果int不是final,那么您可以更改变量的值。 因此,如果您不想通过out代码更改变量值,那么您可以使用final static int。
答案 5 :(得分:1)
我认为最终的静态变量并没有完成,而是要说出名字。因此,PARAMETER1
甚至比1
更有说服力。因此,在阅读代码时可以提高理解力。
答案 6 :(得分:-2)
也许是因为变量是由编译器内联的。