【问题标题】:toString method for varargs constructor可变参数构造函数的 toString 方法
【发布时间】:2010-03-16 23:24:03
【问题描述】:

我有一个像这样的可变参数构造函数:

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());

     }

 }

该类可以通过此构造函数接受各种类型的数据(整数、字符串和 Sentence 对象也是如此)。如何为这样的类创建合适的 toString 方法?

【问题讨论】:

    标签: java constructor tostring variadic-functions


    【解决方案1】:

    不确定您想要实现的具体目标,但作为 toString() 方法...

    返回一个字符串表示 对象

    ...我想我会将sb.toString() 调用的结果存储为成员字符串变量(例如private String asString),并在覆盖Object 中的方法的toString() 方法中返回它:

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

    【讨论】:

    【解决方案2】:

    你不能在 toString 中打印 Sentence,因为如果你互相初始化 2 个 Sentence 对象,你会得到无限循环。

    因此,打印所有字符串和对象,以及是否可能来自 Sentence 对象的一些数据,或者仅打印“1 个句子对象”以指出它也作为 init 参数传递。

    【讨论】:

    • 对不起,死循环怎么弄的?
    • 目前他不会得到它,但是如果他添加setText(Object...text) 方法或类似的方法,那么他可以期待惊喜。
    • 我认为@Roman 假设Sentence 将包含一个成员变量Object[] objects,它将跟踪Sentence 中的Objects,而Sentence 将有某种自己的append() 方法允许添加额外的Objects。在这种情况下,在toString() 中生成String 表示可能会导致无限循环:Sentence s1 = new Sentence(); Sentence s2 = new Sentence(s1); s1.append(s2); 这会导致无限循环。不过,这些假设可能不成立,我认为@Brabster 的解决方案总体上更有意义。
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2011-09-05
    • 2016-09-02
    • 1970-01-01
    • 2016-01-02
    • 2012-02-15
    • 2018-05-18
    相关资源
    最近更新 更多