Enum java de type string

Résolu/Fermé
Flog78 Messages postés 16 Date d'inscription mercredi 28 novembre 2012 Statut Membre Dernière intervention 17 mai 2013 - Modifié par Flog78 le 28/11/2012 à 11:34
KX Messages postés 16635 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 27 novembre 2022 - 28 nov. 2012 à 14:11
Bonjour,
Voila je voudrai déclarer une variable de type String, qui ne puisse prendre des valeurs que parmi une liste de String que j'aurais défini, de la même facon que les énumeré dans les base de donnée.
Par exemple je déclare une variable mobilier de type String, qui ne peut prendre que les valeurs "table", "chaise" et "bureau".

Le but est que si dans mon code je fait
mobilier = "chaise"; le compilo ne dit rien et que si je fait
mobilier = "armoire"; le compilo dit que c'est impossible.

Merci d'avance.

2 réponses

KX Messages postés 16635 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 27 novembre 2022 2 981
28 nov. 2012 à 14:03
Les enum sont une bonne idée, d'autant qu'en Java ce sont des classes puissantes auquel on peut rajouter des champs, constructeurs et méthodes, pour les manipuler comme on veut :

Déclaration simple :

enum Mobilier { TABLE, CHAISE, BUREAU }

public class Test
{
	public static void main(String[] args)
	{
		Mobilier mobilier = Mobilier.CHAISE;
		
		System.out.println(mobilier); // "CHAISE"
	}
}

Déclaration riche :

enum Mobilier
{
	// Les objets énumérés sont forcément au début de la déclaration
	// Ils doivent faire appel à un des constructeurs définis
	TABLE("table"), CHAISE("chaise"), BUREAU("bureau");
	
	private String str;
	
	// Les constructeurs ne peuvent pas être protected ou public
	private Mobilier(String val)
	{
		str = val;
	}
	
	public String toString()
	{
		return str;
	}
}

public class Test
{
	public static void main(String[] args)
	{
		Mobilier mobilier = Mobilier.CHAISE;
		
		System.out.println(mobilier); // "chaise"
	}
}

Remarque : s'il s'agit juste de modifier le toString pour mettre le nom de l'enum en minuscules, le champs str est inutile et on pourrait faire directement comme ça :

enum Mobilier 
{
	TABLE, CHAISE, BUREAU;
	
	public String toString()
	{
		return super.toString().toLowerCase();
	}
}

public class Test
{
	public static void main(String[] args)
	{
		Mobilier mobilier = Mobilier.CHAISE;
		
		System.out.println(mobilier); // "chaise"
	}
}
1
Flog78 Messages postés 16 Date d'inscription mercredi 28 novembre 2012 Statut Membre Dernière intervention 17 mai 2013 4
28 nov. 2012 à 14:06
Et si l'utilisateur saisie un mot, comment je fait pour vérifier qu'il est dans mon enum ?
0
KX Messages postés 16635 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 27 novembre 2022 2 981
28 nov. 2012 à 14:11
Tu peux utiliser la méthode values() des Enum, par exemple comme ceci :

enum Mobilier 
{
	TABLE, CHAISE, BUREAU;
	
	public String toString()
	{
		return super.toString().toLowerCase();
	}
	
	public static Mobilier get(String saisie)
	{
		for (Mobilier m : values())
			if (saisie.equals(m.toString()))
				return m;
		return null;
	}
}

public class Test
{
	public static void main(String[] args)
	{
		Mobilier mobilier = Mobilier.get("chaise");
		
		System.out.println(mobilier); // "chaise"
	}
}
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 28/11/2012 à 11:44
Bonjour Flog78,
WikiBooks ou sur JAVA, toute la documentation nécessaire tu trouveras concernant ENUM
enum BotFicelle{ CORDE, FIL, SERPENTIN };
0