J'ai quelques suggestions. N'hésitez pas à vous défausser s'ils ne vous conviennent pas.
Puisque vous dites que vous avez besoin du nombre ordinal du ENUM, vous pouvez aller dans l'autre:
if (ApplicationStatus.values()[Integer.parseInt(statusMasterId)] == ApplicationStatus.PendingVerification) {
// do your stuff
}
Soyez conscient que, comme dans la question Integer.parseInt(statusMasterId)
peut jeter un NumberFormatException
.
Une autre suggestion, la méthode comparer de la réponse de Jay Smith peut être franchi une étape supplémentaire pour accepter un argument de chaîne:
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);
}
}
Il n'y a pas de risque d'un NumberFormatException
, mais vous pouvez envisager le risque il y a même pire: Ceci ne reconnaîtra pas par exemple "+2"
ou "02"
comme représentant le nombre 2. Si vous voulez stocker la valeur de chaîne de manière permanente dans l'objet enum est discutable; Si vous voulez vraiment que la comparaison soit efficace, vous voulez le faire. Le code de Jay Smith utilise le value
, je l'ai changé en utilisant ordinal()
.
Voici le test!
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");
}
Cette imprime
Not eligible
Still not eligible using the compare() method
En effet, ordinaux commence à 0, donc NotEligible
, avec une valeur de 3, a ordinal 2, ce n'est pas la même chose.
probablement un 'switch case' – XtremeBaumer
Vous ne voudriez pas utiliser' getStatusMasterId' au lieu de 'ordinal'? Je considérerais aussi avoir une méthode dans 'ApplicationStatus' qui pourrait prendre une valeur' int' et retourner un 'ApplicationStatus', mais c'est juste moi – MadProgrammer
Qu'est-ce que vous essayez d'accomplir? – ajb