JavaRush /Blog Java /Random-FR /Comment remplacer efficacement la méthode ToString() à l'...
dio
Niveau 16
Москва

Comment remplacer efficacement la méthode ToString() à l'aide de ToStringBuilder.

Publié dans le groupe Random-FR
ToStringBuilder est une classe d'assistance fournie par la bibliothèque de langage Apache Commons . ToStringBuilder est une classe utilitaire fournie par les bibliothèques Apache Commons Lang. Il offre un contrôle complet et meilleur sur les données d'objet et la quantité qui doit être générée par la méthode toString(), ainsi que dans quel format. ToStringBuilder vous aide à éviter d'écrire beaucoup de code en éliminant le besoin de remplacer la méthode ToString() dans les classes enfants. ToStringBuilder peut être utilisé pour créer une sorte de modèle afin de tirer pleinement parti des fonctionnalités qu'il offre. Pour inclure Commons-Lang dans votre projet, ajoutez les dépendances suivantes à votre fichier de configuration Maven. Dans cet article, je vais donner quelques exemples d'utilisation qui peuvent être considérés comme de bonnes pratiques pour remplacer la méthode ToString() dans les classes de votre prochaine application. Pour démontrer les différentes possibilités d'utilisation de ToStringBuilder pour créer la méthode toString() dans différents scénarios, je vais créer trois modèles : AbstractUser.java, WebUser.java et GuestUser.java. commons-lang commons-lang 2.5
RésuméUtilisateur.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
UtilisateurWeb.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
Divers cas d'utilisation
1) la méthode toString() de la super classe est utilisée par toutes les classes enfants.
Vous pouvez remplacer la méthode toString() dans la classe d'objet de niveau supérieur, c'est-à-dire dans notre cas AbstractUser.java. Cette méthode est utilisée par toutes les classes enfants sauf si elles contiennent leur propre version de la méthode toString(). @Override public String toString() { return ToStringBuilder.reflectionToString(this); } La méthode ToString() ci-dessus est capable de donner toutes les informations disponibles sur la classe actuelle, elle fonctionnera également dans les sous-classes à moins que la sous-classe ne remplace la méthode ToString(). package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) Formatage personnalisé de tout type, comme les données
Vous pouvez appliquer un format personnalisé à n'importe quel champ de la méthode ToString. Un exemple de formatage personnalisé est présenté ci-dessous : package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } } Pour utiliser le formatage, placez-le dans une méthode comme celle-ci : @Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) Utilisez les informations de la super classe dans la sous-classe avec un appel de méthode simple
Si vous souhaitez remplacer ToString() dans une classe enfant pour ajouter quelque chose aux informations reçues de la super classe, procédez comme ceci : public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) Utilisation des informations uniquement jusqu'à un certain niveau de la hiérarchie successorale
Supposons que dans une classe enfant vous ayez besoin d'étendre les champs de toutes les super classes, vous pouvez inclure des informations jusqu'à un certain niveau de la hiérarchie d'héritage de la manière suivante : public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) Affichez uniquement les informations souhaitées
Parfois, vous ne souhaitez pas inclure tous les champs d'une classe dans la méthode ToString(). Ensuite, vous pouvez procéder comme ceci : public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi] Vous pouvez télécharger le code source des exemples ci-dessus à partir de ce lien. Télécharger la source Article original : Comment remplacer efficacement toString() avec ToStringBuilder
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION