web-dev-qa-db-fra.com

La méthode toString () de String a-t-elle un but pratique?

Je lisais les docs et l'ai remarqué. Jamais imaginé. La description:

Cet objet (qui est déjà une chaîne!) Est lui-même retourné.

Outre le fait de remplir des conventions ou d'utiliser des ressources informatiques, que fait une .toString() en Java sur une String qu'avec le String lui-même ne le serait pas? Pourquoi n'hérite-t-il pas simplement de la .toString() de la classe Java.lang.Object?

MODIFIER:

Je comprends que dans les situations de polymorphisme, une propre méthode toString() doit exister, car elle substitue la fonction toString() de son parent. Ce que je veux savoir dans la première question est de savoir s’il existe une situation dans laquelle vous obtiendrez quelque chose de différent entre utiliser stringVariable/"String value" et utiliser stringVariable.toString()/"String value".toString().

Ex. gr .: Une opération de sortie comme System.out.println(stringVariable.toString()); ou une attribution de valeur comme stringVariable = "String value".toString();.

16
user985358

Outre le fait de remplir des conventions ou d'utiliser des ressources informatiques, que fait un .toString () en Java sur une chaîne que l'utilisation de la chaîne elle-même ne permettrait pas?

Cela signifie que cela donne un résultat approprié quand on l'appelle polymorphe.

Pourquoi n'hérite-t-il pas simplement de la classe .toString () de la classe Java.lang.Object?

Parce que cela ne donnerait pas le même résultat, et presque certainement pas le désiré résultat.

Object.toString() est destiné à donner une représentation sous forme de chaîne raisonnablement utile de l'objet. L'implémentation Object fournit des informations sur le type et une valeur pouvant être utilisée pour les indicateurs d'identité bruts (utile au diagnostic, mais c'est tout). C'est clairement not la représentation de chaîne la plus utile pour une chaîne - la chaîne elle-même l'est.

Bien que je voudrais dise qu’il est dommage que toString soit défini de manière très floue (il n’est pas clair si le résultat est destiné à la consommation de la machine, du développeur ou de l’utilisateur), il me semble évident qu’un String serait se retourner dans la mise en œuvre.

34
Jon Skeet

Exemple pratique:

public abstract class MetadataProcessor {

protected void processMetadata() {    
   Map<String, Object> metadata = getMetadata();
   for(String key : metadata.keySet()) {
      if(metadata.get(key) instanceof Date) {
      processDate(metadata.get(key));
   } else { //String or any other object type
      processString(metadata.get(key).toString());
   }
}

private void processDate(Date date) {
   (...)
}

private void processString(String string) {
   (...)
}

/**
* contains document's metadata, values must be String or Date
**/
protected abstract Map<String, Object> getMetadata();
}

Si .toString () de String ne renvoie pas la chaîne elle-même, un if(foo instanceof String) supplémentaire serait nécessaire dans le code ci-dessus.

1
Mr.Radar
public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence

voir: https://docs.Oracle.com/javase/10/docs/api/Java/lang/String.html

Tous les objets ont la méthode toString() (voir https://docs.Oracle.com/javase/10/docs/api/Java/lang/Object.html#toString () ). String est un type d'objet. Par conséquent, il a également besoin d'une méthode toString() pour l'implémentation de la méthode à partir de sa classe de base.

0
foobarfuu

L'implémentation de la méthode toString en Java est effectuée en redéfinissant la méthode Object's toString. La méthode Java toString() est utilisée lorsque nous avons besoin d'une représentation sous forme de chaîne d'un objet. Il est défini dans la classe Object. Cette méthode peut être remplacée pour personnaliser la représentation String de la Object.

0
Aditya Kansara