Enum java de type string

Résolu
Flog78 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   4
 
Et si l'utilisateur saisie un mot, comment je fait pour vérifier qu'il est dans mon enum ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   92
 
Bonjour Flog78,
WikiBooks ou sur JAVA, toute la documentation nécessaire tu trouveras concernant ENUM
enum BotFicelle{ CORDE, FIL, SERPENTIN };
0