11
votes

Définition d'une valeur Enum basée sur une chaîne entrante

J'ai un certain nombre de méthodes de setter qui prennent une énumération. Ceux-ci sont basés sur l'attribut d'objets entrants. Plutôt que d'écrire un tas de ceux-ci, il y a une solution pour avoir à un code difficile, disons 10 déclarations de cas différentes. S'il y aurait un moyen de créer une méthode réutilisable?

//Side class declared as
public final enum Side

//How I initialise side
static Side side = Side.SELL;//default

//method to set object
Obj.setSide(sideEnum(zasAlloc.getM_buySellCode()));

//How I am implementing it
    public static Side sideEnum(String buysell)
    {

        if(buysell.equalsIgnoreCase("S"))
        {
            side = Side.SELL; //default 
        }
        else if(buysell.equalsIgnoreCase("B"))
        {
            side = Side.BUY; 
        }

        return side;

    }


0 commentaires

4 Réponses :


6
votes

Enums ont une méthode de la valeur () qui peut être utilisée pour convertir de la chaîne. Est-ce ce que vous recherchez?


4 commentaires

Enum1 ("One", "1", "I") Créez votre propre méthode similaire à la valeur de telle que getenum (string s). Cela vous permettrait de retourner Enum1 pour l'une des valeurs d'attribut. La valeurOf fonctionne bien pour de nombreux cas cependant.


Commentaire C'est plus le genre que si la chaîne qui entre en est "D", il mappe de statique Enum Side.Dog


@WILL, c'est pourquoi vous devez fournir du code, sinon nous sommes tous de la prise de vue dans le noir.


Je le réalise mais malheureusement. Je travaille avec deux objets que je n'ai pas accès à la source.



26
votes

Vous pouvez mettre en œuvre cette fonctionnalité dans votre Enum code>.

public static Side fromString(String from) {
    for (Side s: Side.values()) {
        if (s.toString().startsWith(from)) {
            return s;
        }
    }

    throw new IllegalArgumentException( from );
}


2 commentaires

Commentaire mineur, si vous avez beaucoup d'énumérums et la méthode Fromsletter () est appelée Souvent, il peut être logique de créer un HASHMAP statique pour effectuer une recherche / récupération plus rapidement. Mais votre solution est parfaitement logique!


@Peter, correct. C'est juste la voie rapide et sale. Mais le hashmap est certainement intéressant de noter.



0
votes

Je pense que vous avez besoin de smth comme: xxx


0 commentaires

2
votes

J'ai fini par utiliser une carte d'objet simple: xxx

et simplement en utilisant xxx


0 commentaires