java:使用最终的静态int=1比使用普通的1好吗?

java:使用最终的静态int=1比使用普通的1好吗?,java,Java,我刚刚看到一个类(一个大的API模块),其中有很多类似的东西 readParamString(Object params, int index) 在这个类中有10个字段 final static int PARAM1 = 1 ... final static int PARAM10 = 10 与readParam函数一起使用的 但是您也可以使用普通的int,比如readParamString(o,1) 最终的静态int是否比使用普通int更好?是,比使用普通int更好 但是,如果您使用Jav

我刚刚看到一个类(一个大的API模块),其中有很多类似的东西

readParamString(Object params, int index)
在这个类中有10个字段

final static int PARAM1 = 1
...
final static int PARAM10 = 10
与readParam函数一起使用的

但是您也可以使用普通的int,比如
readParamString(o,1)


最终的静态int是否比使用普通int更好?

是,比使用普通int更好


但是,如果您使用Java 5或更高版本,
enum
优于
final static
变量。

声明静态final常量的一个优点是防止在代码中多次引用相同的文本值,这可能会导致不必要的变化;e、 g.如果程序员无意中更改了一个文字而没有更改其他文字

在您的示例中,我会质疑用值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;

但是,通常会使用枚举来代替这种方法。

可能是因为变量是由编译器内联的。

在您给出的示例中,我认为拥有命名值并不比直接使用int好。参数是一个计数,因此参数的int表示形式与命名版本一样具有描述性

这似乎有点像我偶尔遇到C代码

#define ZERO 0
#define ONE 1
其实没什么意义。事实上,当我看到这些名称被使用时(而不是当我查看定义时),我很想跳转到定义以确保这些名称没有说谎(这已经很长很长时间了,但是,我实际上遇到了错误定义为1,-1或非零的代码,例如,这非常非常非常糟糕)


编辑:在第二次查看时,似乎名称可能指示第一个参数中感兴趣的字段,在这种情况下,名称可能更有意义-只要名称与字段有某种有意义的关联,而不仅仅是数字偏移量。很难说情况是否如此,因为您可能正在解释您真正使用的代码。

这太傻了


提取数值常量的原因是给它们一个明确的名称。PARAM1..PARAM10不是很有说服力。

通过使用关键字
final static int
声明, 您将有一个整数值为1的变量实例。 重要的一点是,此值不能更改 一旦用关键字
final
声明。 否则,, 您可以更改变量的值。
如果您不想在代码的任何地方更改变量值,请使用关键字
final static

我认为这不是为final static变量做的,而是要有明确的名称。因此,甚至
参数1
也比
1
更能说明问题。因此,在阅读代码时可以提高理解能力。

但是如果1的值发生变化怎么办@约翰:我的观点是,如果PARAM1只在类专用代码中的一个地方使用,那么定义它就没有什么价值。过度使用静态最终常量会使代码不可读。IMHO.+1,代码中的幻数应始终使用有意义的语义名称来定义,以使其可读。它们实际上是PARAM1,PARAM2。。。这是实名,它们被用作读取参数的索引如果您希望使用一个热编码(即按位或将不同的值组合在一起)在单个整数中对多个值进行编码,“static final int”方法仍然很有用,最后的静态是完全无用的。@Adamski:对于真正的OO方法,我建议使用
EnumSet
,而不是老式的按位OR方法。+1。另一个原因可能是跟踪引用,并能够在一个地方维护它们。但是一个有意义的名称也会更好。请注意,愚蠢的名称可能有一个目的,即能够用JavaDoc记录它们的用法。这些东西都不适用于Java中的int文本,除非常量值意味着什么(与
PARAM1
相反,它将由一个名称表示,如
NUMBER\u OF WOGGLES\u IN_a_BOGGLE