我正在使用枚举来定义所有常量变量。
枚举
public enum ApplicationStatus {
Initiated(1), PendingVerification(2), NotEligible(3), Approved(4), SoftDenial(
5), Deferred(6), Saved(7), Cancelled(8), Approved_NoSSN(9), PendingVerification_NoSSN(
10), Approved_Archived(11);
private final int value;
private ApplicationStatus(int value) {
this.value = value;
}
public int getStatusMasterId() {
return value;
}
};
我需要比较两个整数值。比较以下整数的有效方法是什么?
比较整数: -
public void applicationStatus(){
String applicationStatus = null;
String statusMasterId = "2";
if(ApplicationStatus.PendingVerification.ordinal() == Integer.parseInt(statusMasterId)){
applicationStatus = "Pending Verification";
}
}
建议欢迎!
答案 0 :(得分:1)
您有两个选项,两个比较枚举。
compareTo
方法。请参阅https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#compareTo(E) 在枚举中创建自己的比较方法。像:
public enum ApplicationStatus {
Initiated(1), PendingVerification(2), NotEligible(3), Approved(4),
SoftDenial(5), Deferred(6), Saved(7), Cancelled(8),
Approved_NoSSN(9),PendingVerification_NoSSN(10),
Approved_Archeived(11);
private final int value;
private ApplicationStatus(int value) {
this.value = value;
}
public int getStatusMasterId() {
return value;
}
public boolean compare(int value) {
return this.value==value;
}
};
答案 1 :(得分:1)
我有几点建议。如果它们不适合你,请随意丢弃。
既然你说你需要enum的序数,你可以走另一条路:
if (ApplicationStatus.values()[Integer.parseInt(statusMasterId)] == ApplicationStatus.PendingVerification) {
// do your stuff
}
请注意,问题中Integer.parseInt(statusMasterId)
可能会抛出NumberFormatException
。
另一个建议是,杰伊史密斯回答的比较方法可能会更进一步接受一个字符串参数:
public enum ApplicationStatus {
Initiated(1), PendingVerification(2), NotEligible(3), Approved(4),
SoftDenial(5), Deferred(6), Saved(7), Cancelled(8),
Approved_NoSSN(9),PendingVerification_NoSSN(10),
Approved_Archeived(11);
private final int value;
// redundant representation of ordinal() as a string for comparison to other strings
private final String ordinalAsString;
private ApplicationStatus(int value) {
this.value = value;
ordinalAsString = String.valueOf(ordinal());
}
public int getStatusMasterId() {
return value;
}
public boolean compare(String stringValue) {
return this.ordinalAsString.equals(stringValue);
}
}
不存在NumberFormatException
的风险,但您可能会认为风险更严重:例如,"+2"
或"02"
无法识别代表数字2。你想将字符串值永久存储在枚举对象中是有问题的;如果你认真想要比较有效,你确实想要。 Jay Smith的代码使用value
,我已将其更改为使用ordinal()
。
这是测试!
String statusMasterId = "2";
if (ApplicationStatus.values()[Integer.parseInt(statusMasterId)] == ApplicationStatus.NotEligible) {
System.out.println("Not eligible");
}
if (ApplicationStatus.NotEligible.compare(statusMasterId)) {
System.out.println("Still not eligible using the compare() method");
}
打印
Not eligible
Still not eligible using the compare() method
这是因为序数从0开始,所以NotEligible
的值为3,序号为2,这不是一回事。