0
votes

Est-il possible d'obtenir une valeur Enum par chaîne de multiples Enums?

Si j'ai:

Enum<?> myEnum = [METHOD THAT GETS ENUM BY STRING FROM TWO DIFFRENT ENUMS];


2 commentaires

Pourquoi avez-vous besoin de cela? Sonne comme un XY Problème .


S'il vous plaît définir quelle est une "valeur enum". La question est très difficile à comprendre.


3 Réponses :


0
votes

Vous pouvez faire quelque chose comme ceci:

import java.util.ArrayList;
import java.util.List;

interface ValueProvider{
    public String getValue();
}
enum FirstEnum implements ValueProvider {
    A("a"), B("b");
    private String value;
    FirstEnum(String s) {
        this.value=s;
    }
    public String getValue(){
        return value;
    }
}

enum SecondEnum implements ValueProvider{
    C("c"), D("d");
    private String value;
    SecondEnum(String s){
        this.value=s;
    }
    public String getValue(){
        return value;
    }
}

public class enumTest {
    public static void main(String[] args) {
        ArrayList<ValueProvider> al = new ArrayList<ValueProvider>();
        al.add(FirstEnum.A);
        al.add(SecondEnum.C);
        al.add(FirstEnum.B);
        al.add(SecondEnum.D);
        listEnumValues(al);
    }
    public static void listEnumValues(List<ValueProvider> al){
        for(var e:al){
            System.out.println(e.getValue());
        }
    }
}


0 commentaires

0
votes

Voici une solution possible à votre question spécifique. Notez la méthode:

Enum myenum = getenumvaluefromtwodifferentenumsbyname (Firstenenum.class, secondenum.class, Nomvaluename); P>

    public enum FirstEnum {
        A, B;
    }

    public enum SecondEnum {
        C, D;
    }
    //Enums will throw NPE when the value is not found so we have to handle this first
    public static Enum<?> getEnumValueNoException(Class<? extends Enum> enumeration, String valueName) {
        try {
            return Enum.valueOf(enumeration, valueName);
        } catch (NullPointerException e) {
            return null;
        }
    }

    public static Enum<?> getEnumValueFromTwoDifferentEnumsByName(Class<? extends Enum> enum1, Class<? extends Enum> enum2, String enumValueName) {
        Enum<?> possibility1 = getEnumValueNoException(enum1, enumValueName);
        Enum<?> possibility2 = getEnumValueNoException(enum2, enumValueName);

        if (possibility1 == null && possibility2 == null) {
            throw new NullPointerException("Found no valid enum values for name " + enumValueName + " in enums " + enum1 + " and " + enum2);
        }

        return possibility1  != null ? possibility1 : possibility2;
    }

    public static void main(String[] args) throws Exception {
        String enumValueName = "A";
        Enum<?> myEnum = getEnumValueFromTwoDifferentEnumsByName(FirstEnum.class, SecondEnum.class, enumValueName);
        System.out.println(myEnum);
    }


0 commentaires

0
votes

Une manière simplifiée si vous recherchez une paire d'énums prédéfinie consiste à faire xxx

et si le résultat est null alors faites la même chose pour secondenum .

Notez que je compare à l'aide de Tostring que vous voudrez peut-être remplacer s'il s'agit des variables enum ("A", "B", etc.). Match


0 commentaires