【问题标题】:Custom 'String' Class自定义“字符串”类
【发布时间】:2012-08-26 19:01:36
【问题描述】:

我试图弄清楚 java 类是如何工作的。

当我创建StringBuilder:

StringBuilder testString = new StringBuilder("Hello World!);

如果我想获取 testSting 引用的值,我可以简单地将其称为:System.out.println(testString);

这是很酷的行为,但我不确定如何在我制作的类中复制它。

例如,如果我要尝试重新实现我自己的StringBuilder 版本,我会采取的方法(作为初学者)是这样的:

class MyBuilder {
    char[] string; 


public MyBuilder(String s) {
    string = new char[s.length()];
    string = s.toCharArray();

}

因此,为了使字符串成为数组,我必须将其存储在类的数据字段中。但是,要在我的代码中访问它,我不能通过简单地调用变量名来打印它。我将不得不使用.property 语法。因此,要复制上面的示例,我必须输入System.out.println(testString.value);,这几乎没有那么漂亮。

如何创建一个类,使其行为类似于StringStringBuilder 并在不手动访问数据字段的情况下返回其值?

【问题讨论】:

  • 覆盖toStringPrintStream.println 只是做toString 来确定字符串表示。

标签: java string stringbuilder


【解决方案1】:

实现toString 方法。

toStringObject 上的一个方法,所以每个java 对象都继承一个。您继承的默认实现仅对获取类类型以及区分一个对象和另一个对象有用;格式为:ClassName@HashCode。您的实施没有独特的细节。

在您自己的类中,要获得所需的描述,您需要覆盖 toString 方法,以便在需要 String 的上下文中,例如当您调用System.out.println(myObject.toString()); 时,将使用您自己的格式。

这样做通常是一个好主意,以便对您的对象进行更易读的描述。您可以随时调用 super.toString 以将默认输出 - ClassName@HashCode - 包含在您自己的输出中。

【讨论】:

    【解决方案2】:

    您可以在对象MyBuilder 中覆盖Object.toString()。 System.out.println 为使用的每个对象调用此方法。例如在这里,您可以使用:

    @Override
    public String toString() {
       return Arrays.toString(string);
    }
    

    【讨论】:

      【解决方案3】:

      覆盖 toString 方法

      private String value;
      
      public MyClass(String value) {
          this.value = value;
      }
      
      public String toString() {
          return value;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-06-02
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 2011-02-06
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多