java enum getter setter
Je suis à la consommation des données à partir du service web, sera le stockage de données dans les données de titulaire de la classe et puis obtenir que des données à un autre endroit.
Pour un champ particulier, le plus approprié pour le type de données enum et donc j'ai créé à la suite d'enum:
public enum EventStatus {
PENDING(1), OPEN(2), DISPATCHED(3), APPENDED(4), CLOSED(5), REQUESTED_TO_CLOSE(
6), ACTION_REQUESTED_FROM_POLICE_STATION(7), ACTION_REQUESTED_FROMD_ISPATCHER(
8), ACTION_REQUESTED_FROM_SUPERVISOR(9);
private int value;
private EventStatus(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
}
Cette enum est utilisé dans une autre classe comme suit:
public EventStatus getEventStatus() {
return eventStatus;
}
public void setEventStatus(EventStatus eventStatus) {
this.eventStatus = eventStatus;
}
Maintenant, quand j'essaie de définir la valeur comme suit:
event.setEventStatus(getAttributeValueInt(linkedEventElement, "status"));
qui équivalents à
event.setEventStatus(1);
Je suis d'erreur de compilation que méthode n'est pas applicable pour les arguments(int)
D'une manière que je peux faire c'est de quelque chose comme ceci:
switch(getAttributeValueInt(linkedEventElement, "status")){
case 1:eventLinkedEvent.setEventStatus(EventStatus.PENDING);
//and so on...
}
Mais cette ruine le seul but d'enum.
Également comment obtenir le statut d'événement valeur en entier le formulaire?
Quelqu'un peut-il svp me guider comment aller de l'avant?
OriginalL'auteur GAMA | 2015-04-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer enum comme ce
après vous pouvez essayer en dessous de la ligne pour définir EventStatus
Je pense que c'est utile..
oui, vous avez raison. C'est mon erreur d'oublier ensemble statique de getEventStatusById méthode.
Votre code fonctionne bien, mais que feriez-vous dans une condition semblable, où il y a par exemple 100 les valeurs de l'enum. Qui semble comme une grande commutateur cas. Nous pouvons utiliser
values()
d'unEnum
classe pour réduire efficacement le travail manuel. Regarde ma réponse ci-dessous pour plus de détails 🙂OriginalL'auteur Akash Chavda
Créer un mappage dans l'enum de lui-même à partir de la valeur de constante enum. Et puis un
static
méthode, qui prend unint
type et retourne leenum
type.Semble comme vous le souhaitez ALL_CAPS un peu trop.. BTW, quel est le problème avec le réglage de la valeur aujourd'hui? Appelez simplement que
static
méthode de passage de laint
valeur.utiliser le forValue méthode :
event.setEventStatus(EventStatus.forValue(getAttributeValueInt(linkedEventElement, "status")));
(je suppose que c'est votre question). C'est la meilleure réponse ici, si vous voulez, il est rapide et robuste pour évoluer.OriginalL'auteur Rohit Jain
Un enum est une classe. Ce n'est pas un simple alias un int comme il est en C par exemple. 1 est un entier, et non pas une instance de EventStatus, et votre méthode attend une instance de EventStatus, donc ça ne compile pas.
Il suffit de fournir une méthode de fabrique de l'enum pour transformer un int valeur de l'enum:
Vous pouvez également stocker les enum constantes dans un
Map<Integer, EventStatus>
pour faire de la recherche O(1).Pas de. Il suffit d'utiliser une boucle:
for (EventStatus es : EventStatus.value()) { if (es.getValue() == value) { return es; }
Ok, merci..
OriginalL'auteur JB Nizet
Solution rapide, depuis votre ordinaux (Enum index) correspondent à vos valeurs (avec une différence de 1), de modifier votre Enum
EventStatus
pour inclure le nouveau tableau deEventStatus
:-Maintenant, au lieu de cela:-
Utiliser ceci:-
Elle va retourner la valeur d'Enum pour le correspondant de la valeur ordinale, Par exemple:-
-1
est parce que vous avez fourni vos valeurs ordinales à partir de 1.OriginalL'auteur Mustafa sabir