Java: Obtenir les propriétés d'une classe à construire une représentation de chaîne
Disons que j'ai une classe comme ça (et aussi plus loin suppose que toutes les variables privées:
public class Item {
private String _id = null;
private String _name = null;
private String _description = null;
...
}
Maintenant, si je veux construire un toString() de la représentation de cette classe, je voudrais faire quelque chose comme ceci à l'intérieur de la classe Item:
@Override
public String toString() {
return (_id + " " + _name + " " + _description);
}
Mais si je dois dire 15 variables privées à l'intérieur de la classe? Dois-je écrire le nom de chaque variable comme ceci?
Idéalement, je voudrais en finir avec la tâche en parcourant la liste des variables privées de cette classe et la construction de la représentation de chaîne:
@Override
public String toString() {
ArrayList<String> members = getClass().getMembers(); //Some method like this
String string = "";
for(...)
string += members[i] + " ";
}
Ou peut-être une méthode toJSON, je voudrais encore avoir besoin du nom de ces variables. Des suggestions?
- Voir aussi Auto-générer de la Méthode toString
Vous devez vous connecter pour publier un commentaire.
Que vous pouvez faire:
Ne pas utiliser la concaténation de chaîne de construire un résultat final à partir de 15 membres de données, en particulier si le
toString()
sera appelé beaucoup de choses. La fragmentation de la mémoire et de la surcharge pourrait être très élevé. UtilisationStringBuilder
pour la construction des grandes chaînes dynamiques.J'ai l'habitude de recevoir mon IDE (Ide) de simplement générer
toString()
méthodes pour moi plutôt que d'utiliser la réflexion pour cette.Une autre approche intéressante est l'utilisation de la @ToString d'annotation à partir d'un Projet de Lombok:
Je trouve cela beaucoup plus préférable à dire, Jakarta Commons toString constructeurs parce que cette approche est beaucoup plus configurable et il est également conçu au moment de la compilation pas au moment de l'exécution.
Vérifier cette API org.apache.commons.lang.générateur de rapports.ToStringBuilder, il offre de multiples façons de créer toString usinf réflexion ou sans réfléchir. Jetez un oeil à d'autres sous-classes ainsi.
Il y a une api, et il est appelé Réflexion Java
Pour accomplir ce que vous demandez, vous pouvez simplement faire quelque chose comme:
Cela devrait être exactement ce que vous cherchez
La plupart des IDEs de fournir un moyen de créer un
toString
méthode dans une classe donnée.Donné un
Item
classe avec plusieurs champs:Par exemple, dans Eclipse, l'exécution de "Générer toString()" sur le
Item
classe ci-dessus va créer les suivants:À l'aide de la réflexion permettrait de programmation de manière à observer ses propres champs, mais la réflexion elle-même est assez cher (lire: la lenteur des processus, de sorte que si c'est vraiment nécessaire, à l'aide d'un fixe
toString
méthode écrite au moment de l'exécution va probablement être plus souhaitable.Vous pouvez exécuter le problème de la vitesse. Si vous êtes à l'aide de la réflexion, il peut être très lente, en comparaison à l'exécution de code natif. Si vous allez utiliser la réflexion, alors vous devriez probablement avoir une mémoire cache des variables que vous goaing à parcourir.
À partir de la bon medopal répondre, vous pouvez utiliser ce code pour avoir une représentation de chaîne de tous les champs d'un objet, même si vous êtes en dehors de sa classe (évidemment, c'est uniquement pour les champs avec une méthode de lecture):