1

我试图弄清楚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);“不太漂亮”。

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

4

3 回答 3

6

实现一个toString方法。

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

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

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

于 2012-08-26T19:03:27.537 回答
1

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

@Override
public String toString() {
   return Arrays.toString(string);
}
于 2012-08-26T19:04:27.450 回答
0

覆盖 toString 方法

private String value;

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

public String toString() {
    return value;
}
于 2012-08-26T19:06:49.167 回答