2010-03-16 12 views
2

J'ai un constructeur varargs comme ceci:toString pour le constructeur varargs

public class Sentence { 

    public String[] str; 

     public Sentence(Object... text){ 

     StringBuilder sb = new StringBuilder(); 
     for (Object o : text) { 
      sb.append(o.toString()) 
      .append(" "); 
     } 
     System.out.println(sb.toString()); 

    } 

} 

La classe peut peut accepter différents types de données via ce constructeur (ints, objets chaînes, et Sentence ainsi). Comment puis-je créer une méthode toString appropriée pour une telle classe?

Répondre

2

Je ne sais pas exactement ce que vous essayez d'atteindre, mais comme la méthode toString() ...

Renvoie une représentation de chaîne de l'objet

... Je suppose que je devrais stockez le résultat de votre appel sb.toString() en tant que membre String (par exemple private String asString) et renvoyez-le dans une méthode toString() en remplaçant la méthode dans Objet:

public String toString() { 
    return this.asString; 
} 
+0

c'est la suite de ce post: http://stackoverflow.com/questions/2373419/one-constructor-multiple-arguments – owca

0

Vous ne pouvez pas imprimer Phrase dans toString car vous pouvez obtenir une boucle infinie si vous initialisez 2 objets Senence entre eux. Donc, imprimez toutes les chaînes et tous les objets et si possible des données de l'objet Phrase, ou seulement "1 objet phrase" pour indiquer qu'il est également passé en paramètre init.

+0

Désolé, comment obtenez-vous une boucle infinie? –

+0

Au moment où il ne l'obtiendra pas, mais s'il ajoute la méthode 'setText (Object ... text)' ou quelque chose de similaire, il peut s'attendre à la surprise. – Roman

+0

Je pense que @Roman suppose que "Sentence" contiendrait une variable membre 'Object [] objects' qui garderait une trace de quel' Object's sont dans le 'Sentence', et que' Sentence' aurait une sorte de ' append() 'sa propre méthode permettant d'ajouter des' Object's supplémentaires. Dans ce cas, générer une représentation 'String' dans' toString() 'pourrait provoquer une boucle infinie:' Phrase s1 = new Sentence(); Phrase s2 = nouvelle phrase (s1); s1.append (s2); 'Cela provoquerait une boucle infinie. Ces hypothèses pourraient ne pas être valables, et je pense que la solution de @ Brabster a plus de sens dans l'ensemble. –