所有
我在第一天阅读团队的代码(那个人写下了这个......):
有一个枚举定义让我非常困惑:
/**
* Enum defines the processing stages and the order
*
*/
public enum ProcessStage {
/*
* Individual stages in the process.
* Order of processing is based on the order of listing.
*/
EXTRACT("Extraction", "EXTRACTED", "EXTRACTION_FAILED"),
ROUTE("Routing", "ROUTED", "ROUTE_FAILED"),
PUBLISH("Publishing", "PUBLISHED", "PUBLISH_FAILED");
private String detailedName;
private String successState;
private String failedState;
private ProcessStage(String detailedName, String successState, String failedState) {
this.detailedName = detailedName;
this.successState = successState;
this.failedState = failedState;
}
public String getSuccessState() {
return successState;
}
public String getFailedState() {
return failedState;
}
/**
* Factory method to provide the ProcessStage from its success or failed state value stored in DB.
* @param state
* @return ProcessStage
*/
public static ProcessStage getProcessStage(String state) {
for(ProcessStage ps: ProcessStage.values()) {
if(ps.getSuccessState().equals(state) || ps.getFailedState().equals(state)) {
return ps;
}
}
return null;
}
public String toString() {
return detailedName;
}
}
我想知道是否有人给我一些关于如何阅读它的简单介绍(比如它使用什么样的语法)?最困惑的部分是:
EXTRACT("Extraction", "EXTRACTED", "EXTRACTION_FAILED"),
ROUTE("Routing", "ROUTED", "ROUTE_FAILED"),
PUBLISH("Publishing", "PUBLISHED", "PUBLISH_FAILED");
我不太明白这意味着什么,以及如何使用它。
为什么在其中定义了很多方法以及如何将方法与枚举变量一起使用?
由于
答案 0 :(得分:2)
枚举声明定义了一个类(称为枚举类型)。枚举 类体可以包括方法和其他字段。编译器 在创建枚举时自动添加一些特殊方法。
枚举是特殊类型的类。我们可以在这些地方使用枚举,而不是使用常规类创建单例模式或创建常量(如WeekDays)。这里
EXTRACT("Extraction", "EXTRACTED", "EXTRACTION_FAILED"),
此处EXTRACT
是枚举常量,意味着它是类的实例 ProcessStage
以及所有其他枚举常量(ROUTE,PUBLISH)。枚举的所有costants都是唯一对象,这意味着它们是在jvm中创建的单例实例,enum
确保实例是唯一的。您无需为创建单例模式付出额外的努力。
上面的代码不仅是声明,它还是使用三个String参数调用构造函数来创建实例。
private ProcessStage(String detailedName, String successState, String failedState) {
this.detailedName = detailedName;
this.successState = successState;
this.failedState = failedState;
}
为什么里面定义了很多方法?
因为它也是一个类,所以它可以像任何其他类一样使用方法。但限制是,它不能被继承,因为内部枚举扩展了类Enum<E extends Enum<E>>
类。
如何使用enum变量的方法?
EXTRACT.getFailedState() //returns "EXTRACTION_FAILED"
答案 1 :(得分:1)
请记住,在没有看到更多代码的情况下,我无法确切知道这个特定的枚举用于什么。 所以,假设我们在某个地方有一个方法,一个过程通过。
public void doSomething(Process process) {}
现在,我们假设此方法的目的是检查进程的状态,然后根据该结果执行一些逻辑。这需要做类似以下的事情
public void doSomething(Process process) {
if(ProcessStage.EXTRACT.equals(process.getStage()) {
//do something here...you will have access to the methods within
//the enum
}
}
不知道更多,这就是我能给你的全部。我希望这能让你更好地理解这个枚举正在做什么