IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

afficher le nom des attributs et leur contenu


Sujet :

Java

  1. #1
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut afficher le nom des attributs et leur contenu
    Bonjour

    j'ai plusieurs classes java (des beans) qui contiennent des attributs et pour chaque attribut il y a une méthode get et une méthode set. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class MaClasse extends ClasseMere {
    	private String attribut1;
    	private int attribut2;
    	private Boolean attribut3;
     
    	public String getAttribut1() {
    		return attribut1;
    	}
    	public void setAttribut1(String attribut1) {
    		this.attribut1 = attribut1;
    	}
    	public int getAttribut2() {
    		return attribut2;
    	}
    	public void setAttribut2(int attribut2) {
    		this.attribut2 = attribut2;
    	}
    	public Boolean getAttribut3() {
    		return attribut3;
    	}
    	public void setAttribut3(Boolean attribut3) {
    		this.attribut3 = attribut3;
    	}
    }
    je voudrais définir une méthode toString() dans ClasseMere qui me permette d'afficher le nom des attributs et leur contenu. Mon but étant d'obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    attribut1 : contenu
    attribut2 : 1
    attribut3 : true

    avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaClasse maClasse = new MaClasse();
    maClasse.setAttribut1("contenu");
    maClasse.setAttribut2(1);
    maClasse.setAttribut3(Boolean.TRUE);
    System.out.println(maClasse);

    voilà déjà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String toString()
    {
    	String retour="";
    	Field[] fields = this.getClass().getDeclaredFields();
    	for (int i = 0; i < fields.length; i++) {
    		Field field = fields[i];
    		retour+=field.getName()+" : \n";
    	}
    	return retour;
    }
    qui me renvoit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    attribut1 : 
    attribut2 : 
    attribut3 :
    quelqu'un aurait une idée pour que je recupère le contenu ?


    merci
    PoichOU

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Il te faut utiliser la méthode get() de Field pour récupérer la valeur de l'attribut d'une instance.
    Autre remarque : utilise un StringBuffer (ou StringBuilder à partir de Java 5.0) au lieu de concaténer des String, ce qui peut être très couteux en terme de performance (cf la FAQ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    	public String toString() {
    		String endl = System.getProperty("line.separator");
    		StringBuffer sb = new StringBuffer();
     
    		Field[] fields = this.getClass().getDeclaredFields();
    		for (int i = 0; i < fields.length; i++) {
    			Field field = fields[i];
    			Object value = null;
    			try {
    				// On récupère la valeur du champs
    				value = field.get(this);
    			} catch (Exception e) {
    				// Sinon on place l'exception obtenu
    				value = e;
    			}
    			// On utilise append() pour construire la chaine
    			sb.append(field.getName())
    				.append(" : ")
    				.append(value)
    				.append(endl);
    		}
    		return sb.toString();
    	}
    Mais cela récupère directement la valeur du champs sans passer par la méthode getXXX()... Si tu veux cela il faut utiliser la classe Introspector et BeanInfo pour récupérer toutes ces infos

    a++

  3. #3
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    je te remercie bcp pour ta réponse.

    ça m'oblige à déclarer mes attributs protected ou public mais ça fait exactement ce que je veux.

    merkiiiiiiiiii

    PoichOU

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par PoichOU
    ça m'oblige à déclarer mes attributs protected ou public mais ça fait exactement ce que je veux.
    Dans ce cas le plus propre serait d'utiliser la classe Instrospector qui utilise les getter/setter pour lire les champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    	public String toString() {
     
    		String endl = System.getProperty("line.separator");
    		StringBuilder sb = new StringBuilder();
     
    		try {
    			BeanInfo bInfo = Introspector.getBeanInfo(getClass());
     
    			PropertyDescriptor[] descriptors = bInfo.getPropertyDescriptors();
    			for (int i=0; i<descriptors.length; i++) {
     
    				// On récupère le nom du champ :
    				String name = descriptors[i].getDisplayName();
    				Object value;
    				try {
    					// On lit sa valeur en appellant la méthode getXXX()/isXXX() :
    					value = descriptors[i].getReadMethod().invoke(this, (Object[])null);
    				} catch (Exception e) {
    					value = e;
    				}
     
    				// On utilise append() pour construire la chaine
    				sb.append(name)
    					.append(" : ")
    					.append(value)
    					.append(endl);
    			}
    		} catch (IntrospectionException e) {
    			sb.append(e);
    		}
    		return sb.toString();
    	}
    a++

  5. #5
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut


    c'est parfait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2010, 10h30
  2. [Tomcat] afficher la liste des attributs en session
    Par michaelbob dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 11/04/2006, 01h07
  3. [WD10] Afficher les noms des colonnes
    Par devalender dans le forum WinDev
    Réponses: 4
    Dernier message: 24/02/2006, 14h38
  4. [xpath] Requête sur le nom des attributs sans casse
    Par fedfil dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/01/2006, 10h58
  5. Réponses: 11
    Dernier message: 16/10/2004, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo