Question

En plus, bien sûr, leur utilisation avec des primitives. La plupart (sinon la totalité) des mises en œuvre que je vois ne sont utiles du point de vue de programmeur.


EDIT : Je comprends que je suis censé remplacer le comportement par défaut, c'est la raison pour laquelle je l'ai mentionné implémentations :). Et je reçois la valeur de passer outre dans certains composants nécessitant une représentation de chaîne dans une interface graphique. Cependant, dans le JDK au moins, je vois beaucoup des mises en œuvre qui viennent seulement d'utiliser chaque fois que vous avez besoin de déboguer les instances d'objet.

Pourquoi est-il enraciné à la classe d'objets, puisque c'est ne semble utile que pour des trucs GUI / de débogage? y at-il d'autres usages, je ne suis pas au courant?

Était-ce utile?

La solution

toString () est utile lorsque vous voulez une représentation de chaîne d'un objet. Naturellement cela se produit à des fins de débogage, mais peut aussi être valable aux résultats de sortie des opérations à l'utilisateur.

Par exemple, disons que vous avez une classe complexe qui gère des nombres complexes. Si vous voulez les imprimer à un utilisateur dans un format comme 3 + 2i , il est à portée de main si elles définissent toString () que vous n'avez pas à écrire le format à chaque fois et la sortie sera cohérent. Si jamais vous voulez changer cette représentation, par exemple 3 + 2j , il vous suffit de toucher la méthode toString () dans la classe complexe.

toString () ne sont pas à des fins de débogage aussi, mais il est un bon moyen d'obtenir des représentations de chaîne cohérente de vos objets.

Autres conseils

Non, la clé est que vous êtes censé remplacer l'implémentation par défaut de ToString() pour le rendre utile. ToString() peut être un excellent moyen pour sortir la valeur de quelque chose à l'interface utilisateur.

Un exemple simple serait si vous avez une classe Nom avec trois chaînes (prénom, nom). Vous pouvez avoir une méthode de ToString() que les formats pour l'interface utilisateur. «Prénom Moyen », par exemple

Ou une classe qui stocke une opération mathématique (valeurs gauche = 2, Droite = 3, Résultat = 6 et un opérateur ENUM = Multiplier). Appelez-ToString() pour obtenir "2 * 3 = 6".

Cependant , il est probablement plus fréquent d'avoir une variété de différentes méthodes de To<qualifier>String(), comme la classe DateTime .NET. (ToShortDateString(), ToLongDateString(), ToLongTimeString(), ...)

Edit:. Quant à savoir pourquoi il est enraciné dans la classe Object, il est tout simplement parce que ToString() est une opération valide pour quoi que ce soit

En outre, les chaînes peuvent être un bon moyen de marshaling entre les types de données ou les consommateurs de données, car il est (pratiquement) garanti analysable et ne nécessite pas de codage supplémentaire ou de soins.

Ma préférence personnelle est que toString () devrait jamais être utilisé pour autre chose que le débogage. Si vous voulez produire une chaîne pour un objet, fournir une méthode distincte qui documente clairement votre intention (getName (), getDescription (), etc.). Ne jamais compter sur la mise en œuvre d'un toString ().

Le problème est que de nombreux développeurs voir toString () en tant que chaîne de niveau de débogage et pensent rien changer (par exemple lorsque de nouveaux champs sont ajoutés ou supprimés). Heck, certains constructeurs toString () automatisé utiliser la réflexion pour générer un toString () à partir des champs.

J'ai trouvé cette préférence m'a bien servi au fil des ans.

Tout ce que je peux dire est que j'ai eu rupture de code quand j'ai changé la toString de ma classe pour afficher des informations de débogage supplémentaires.

Le code en question était une bibliothèque graphique qui a décidé d'utiliser la valeur de toString comme quelque chose interne (il a été il y a quelques années ... J'oublie ce qu'il était exactement). Le résultat final est que je n'ai pas utilisé cette bibliothèque plus.

Je dirais que, depuis un grand groupe de gens voient toString comme étant utilisé pour le débogage (quel que soit votre opinion de ce qu'il vous pensez qu'il doit être utilisé pour) qu'il est difficile d'utiliser la valeur renvoyée par à faire quoi que ce soit de programmation (comme l'analyser) ou l'afficher à un utilisateur.

Si vous êtes 100% dans le contrôle des méthodes toString puis par tous les moyens faire ce que vous voulez.

Alors, pour répondre à la question, non toString est non seulement utile pour le débogage, vous pouvez faire tout ce que vous voulez. Cependant, ne soyez pas surpris si des changements toString de façon qui vous rendent malheureux.

Dans mon expérience, toString () a peu de valeur en dehors du débogage et l'exploitation forestière. Vous ne pouvez pas dépendre de son format ou son contenu au fil du temps, donc autre que d'être lisible par l'homme, ne dépend pas pour autre chose que la plus simple des objets (tels que les types d'objets primitifs). Si des membres de données multiples, attendez qu'ils peuvent changer le type ou le nombre au fil du temps, et la sortie du toString () avec elle.

Un autre point que je voudrais faire fortement. Ne pas appeler d'autres méthodes dans votre toString (). Rien de pire que de vérifier le contenu des variables sur un point d'arrêt dans le débogueur, puis d'avoir un code plus exécuter en raison des appels de méthode dans la toString ().

Je pense qu'il est important de souligner les personnes qui ont répondu à la mention « toString » remarque le « t » minuscule parlent généralement de Java, et les personnes qui ont répondu à la mention « ToString » se réfèrent généralement à C #. Bien sûr, cela ne concerne pas toutes les réponses.

Dans ma propre observation (je l'utilise à la fois par jour), les programmeurs en C # sont encouragés à remplacer « ToString » pour afficher une représentation textuelle utile. Considérant que, en Java, je ne vois pas presque autant. En fait, je vois rarement cela.

-JP

Tout d'abord, la méthode toString doit renvoyer une représentation textuelle lisible par l'homme de l'objet.

Cette question est élevé dans Effective Java Point 10 :. toujours remplacer toString

Il fait référence à la Java API Spécification pour Object.toString méthode :

  

Le résultat devrait être un résumé concis mais   représentation informative qui est   facile pour une personne à lire.

En dehors de débogage, redéfinissant la méthode toString d'une classe peut être utile lorsque ading objets en JList ou JTable , qui par défaut utilisera la méthode de toString pour afficher l'objet en forme de texte de la liste ou table.

Par exemple, dans mon cas, je l'ai surchargée de la méthode toString des objets qui sont ajoutés à un JList afin que l'utilisateur sera en mesure de voir des informations sur l'élément dans une liste par l'interface graphique.

Alors, il y a effectivement des cas où la méthode toString est utile pour les cas autres que le débogage. La clé est d'avoir les informations de retour de la méthode de toString qui est réellement utile pour une personne à voir, et non la mise en œuvre de Object.toString par défaut où l'emplacement de mémoire de l'objet est utilisé pour sa représentation textuelle.

Utile pour

  1. IUG (Propriété complexe lorsque vous utilisez PropertyGrid, le texte d'en-tête de formulaire)
  2. DataBinding (thats la manière dont il travaille)

Et toute autre sortie de chaîne.

ToString () est aussi appelé par le .NET Framework implicitement lors de l'impression sur un objet à une chaîne.

Console.WriteLine("My Object is" + object.ToString());

est équivalent à

Console.WriteLine("My Object is" + object);

parce que le ToString () est appelée implicitement.

Je crois, mais je ne suis pas sûr qu'il est utilisé par le débogueur pour la « valeur » d'un objet. Cela peut être assez pratique, bien que limitée. Dans la plupart des cas l'écriture de votre propre Visualiseur de débogage serait une meilleure idée.

AS3, je devais convertir un tableau 2D dans un tableau 1D. Le plus rapide (vitesse de course) et solution la plus simple (temps de codage) était:

var new1DArray:Array = the2DArray.toString().split(",");

Soyez surpris, mais il travaille effectivement comme prévu et assez rapide aussi!

J'utilise ToString () une tonne pour les formats datetime.

http://hunterconcepts.com/content/tools/formats/

En dehors de ce que tout le monde a déjà dit, remplaçant ToString () est également utile lors de l'utilisation des contrôles qui l'appellent. Par exemple, une zone de liste déroulante:

myComboBox.Items.Add(new MyClass());
// now, whatever ToString() returns is shown in the
// ComboBox, but you can get the object back by through
// the SlectedItem property.

il pourrait ne pas être la « destinée » utilisation mais je l'ai utilisé pour la sérialisation de données

storeToHardDrive(studentList.ToString());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top