返回正确的枚举,而不使用if [英] Return correct enum without using if
本文介绍了返回正确的枚举,而不使用if的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
if(userDecision.equalsIgnoreCase(D)){
return DirectoriesActivity.DELETE;
} else if(userDecision.equalsIgnoreCase(R)){
return DirectoriesActivity.REPLACE;
} else {
return DirectoriesActivity.ADD_NEW_CONTENTS;
}
对于什么会返回只是枚举而不使用if。我必须使用一些枚举属性,但我不知道哪一个:/这是我的枚举:
public enum DirectoriesActivity {
DELETE,
REPLACE,
ADD_NEW_CONTENTS;
}
我尝试这样做:
public enum DirectoriesActivity {
DELETE(D),
REPLACE(R),
ADD_NEW_CONTENTS(A );
private String directoriesActivityCode;
private DirectoriesActivity(String directoriesActivityCode){
this.directoriesActivityCode = directoriesActivityCode;
}
public DirectoriesActivity getEnum(String x){
//不知道该怎么做
}
}
$或者也许有人有其他想法?解决方案 这样做:
public enum DirectoriesActivity {
DELETE(D),
REPLACE(R),
ADD_NEW_CONTENTS(A);
private String directoriesActivityCode;
private DirectoriesActivity(String directoriesActivityCode){
this.directoriesActivityCode = directoriesActivityCode;
}
public DirectoriesActivity getEnum(String x){
for(DirectoriesActivity directoriesActivity:values()){
if(directoriesActivity.directoriesActivityCode.equals(x)) {
return directoriesActivity;
}
}
抛出新的IllegalArgumentException(未知值+ x);
}
}
或者如果您使用Java 8
return Arrays.stream(DirectoriesActivity.values())
.filter(directoriesActivity - > directoriesActivity.directoriesActivityCode.equals(userDecision ))
.findFirst()
.orElseThrow(() - > new IllegalArgumentException(Unknown value+ userDecision));
重要的备注这里是这个解决方案比彼得提供的解决方案。但是,只要性能不成问题,我宁愿采用这样的解决方案。
I have task to change this if:
if (userDecision.equalsIgnoreCase("D")) {
return DirectoriesActivity.DELETE;
} else if (userDecision.equalsIgnoreCase("R")) {
return DirectoriesActivity.REPLACE;
} else {
return DirectoriesActivity.ADD_NEW_CONTENTS;
}
On something what will return just enum without using if. I have to use some enum properties but I don't know which one :/ Here is my enum:
public enum DirectoriesActivity {
DELETE,
REPLACE,
ADD_NEW_CONTENTS;
}
I tried to do something like this:
public enum DirectoriesActivity {
DELETE ("D"),
REPLACE ("R"),
ADD_NEW_CONTENTS ("A");
private String directoriesActivityCode;
private DirectoriesActivity(String directoriesActivityCode) {
this.directoriesActivityCode = directoriesActivityCode;
}
public DirectoriesActivity getEnum(String x){
//no idea what to do here
}
}
Or maybe somebody have some other idea?
解决方案 How about this:
public enum DirectoriesActivity {
DELETE ("D"),
REPLACE ("R"),
ADD_NEW_CONTENTS ("A");
private String directoriesActivityCode;
private DirectoriesActivity(String directoriesActivityCode) {
this.directoriesActivityCode = directoriesActivityCode;
}
public DirectoriesActivity getEnum(String x){
for (DirectoriesActivity directoriesActivity : values()) {
if (directoriesActivity.directoriesActivityCode.equals(x)) {
return directoriesActivity;
}
}
throw new IllegalArgumentException("Unknown value " + x);
}
}
Or in case you are using Java 8
return Arrays.stream(DirectoriesActivity.values())
.filter(directoriesActivity -> directoriesActivity.directoriesActivityCode.equals(userDecision))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unknown value " + userDecision));
Important side note here is that this solution is performing a lot worse than the solution provided by Peter. But as long as performance is not an issue, I'd prefer a solution like this.
这篇关于返回正确的枚举,而不使用if的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文