Enum java de type string [Résolu/Fermé]

Signaler
Messages postés
16
Date d'inscription
mercredi 28 novembre 2012
Statut
Membre
Dernière intervention
17 mai 2013
-
Messages postés
16157
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 janvier 2021
-
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

Messages postés
16157
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 janvier 2021
2 772
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
16
Date d'inscription
mercredi 28 novembre 2012
Statut
Membre
Dernière intervention
17 mai 2013
4
Et si l'utilisateur saisie un mot, comment je fait pour vérifier qu'il est dans mon enum ?
Messages postés
16157
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 janvier 2021
2 772
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"
	}
}
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
85
Bonjour Flog78,
WikiBooks ou sur JAVA, toute la documentation nécessaire tu trouveras concernant ENUM
enum BotFicelle{ CORDE, FIL, SERPENTIN };