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);Which isn't Nearly as pretty と入力する必要があります。

データ フィールドに手動でアクセスせずに、その値のように動作したり、その値を返しStringたりするようにクラスを作成するにはどうすればよいでしょうか?StringBuilder

4

3 に答える 3

6

メソッドを実装しtoStringます。

toStringは のメソッドでObjectあるため、すべての Java オブジェクトは 1 つを継承します。継承するデフォルトの実装は、クラス タイプを取得し、あるオブジェクトを別のオブジェクトと区別する場合にのみ役立ちます。形式はClassName@HashCodeです。実装に固有の詳細はありません。

独自のクラスで必要な記述を取得するには、メソッドをオーバーライドする必要があります。toStringこれにより、 a が必要なコンテキストString(たとえば、 を呼び出すときSystem.out.println(myObject.toString());) で、独自の形式が使用されます。

オブジェクトの説明をより読みやすくするために、これを行うことをお勧めします。super.toStringデフォルトからの出力 ( ClassName@HashCode ) を独自の出力に含めるためにいつでも呼び出すことができます。

于 2012-08-26T19:03:27.537 に答える
1

Object.toString()object でオーバーライドできます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 に答える