有一件事我还不清楚为什么人们只使用界面来存储常量..当java 5提出它的Enums的新功能时..
interface OlympicMedal {
static final String GOLD = "Gold";
static final String SILVER = "Silver";
static final String BRONZE = "Bronze";
}
另一个班级正在实施它..
public class OlympicAthlete implements OlympicMedal {
public OlympicAthlete( int aId ){
//..elided
}
//..elided
public void winEvent( ){
//the athlete gets a gold medal
//note the reference is not qualified, as
//in OlympicMedal.GOLD
fMedal = GOLD;
}
// PRIVATE //
private String fMedal; //possibly null
}
如上所示同样的事情也可以通过枚举轻松建立,如果我有选择存储上面的常量,请告诉我,我应该选择枚举或界面..!
枚举就像......
public enum OlympicMedal {
GOLD, SILVER, BRONZ
}
但请告诉我们班级现在如何访问这些常数.. !!
答案 0 :(得分:4)
只需使用enum
s。它们使您的代码更加类型安全(而不是像示例中的"stringly typed"),并且更容易被习惯于常见Java习语的开发人员阅读和维护。
如果您需要更短的名称,静态导入将有所帮助。
import static mypackage.MyEnum.*;
在您的示例中,interface
使用代码
package mypackage;
public class OlympicAthlete implements OlympicMedal { ... }
更改为使用enum OlympicMedal
而不是
package mypackage;
import static mypackage.OlympicMedal.*;
public class OlympicAthlete { ... }
如果您需要使用enum
来处理旧类文件的Java代码,只需将-source 1.5
and -target 1.4
传递给javac
即可将enum
编译为兼容的内容。这是有效的,因为enum
对于常规JS类只是syntactic sugar。需要注意的是:某些支持类(EnumMap
,EnumSet
)在Java< = 1.4下不可用,因此-target
无法帮助您使代码集成良好。
答案 1 :(得分:0)
Enum仅在java 1.5中引入。我猜您发布的代码可能来自1.5以上
由于类型安全,枚举是最佳选择。
答案 2 :(得分:0)
为什么人们使用界面只存储常量
或许早期版本的Java的坏习惯?
请改用enums
public enum OlympicMedal {
GOLD, SILVER, BRONZ
}
由另一个班级访问:
OlympicMedal medal = OlympicMedal.GOLD;
或者如果您静态导入OlympicMedal
OlympicMedal medal = GOLD;