4

一部のクラス(例ArrayList)のインスタンスをストリーム(例: System.out.println(ArrayListのインスタンス))に出力すると、参照ID(例:ArrayList @ 2144c53d)は出力されませんが、実際の値はいくつかの形式(例:[1,2、 3,4])。自分のクラスでこれをどのように行うことができるのでしょうか。おそらく、メソッドを定義したり、インターフェイスを実装したりする必要がありますか?

4

5 に答える 5

10

シンプル: メソッドをオーバーライドしますObject.toString()。例えば:

public class Person {
    private final String name;
    private final LocalDate birthDate;

    public Person(String name, LocalDate birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    @Override public String toString() {
        return String.format("%s (born %s)", name, birthDate);
    }
}

より複雑な処理については、Formattableインターフェースの実装を検討することをお勧めします。ただし、私は個人的に実装したことはありません。

于 2013-03-19T17:27:44.027 に答える
4

を使用してクラスのオブジェクトを出力しようとすると、そのクラスのメソッドがSystem.out.print検索されます。toString()指定されたクラスで見つからない場合は、スーパークラスでそのメソッドが見つかるまで検索を試みます。そして、クラスで定義されたメソッドStringによって返されたものを出力します。toString()また、クラスが何も拡張しない場合、デフォルトでのtoStringメソッドを呼び出します。このメソッドはObject、次のような文字列を返します。

public String toString() 
{
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

そのため、独自のクラスオブジェクトを出力するときに、このようなタイプの出力が得られます。toString()別の文字を出力するには、独自のクラスのメソッドをオーバーライドする必要があります。例えば:

public class MyClass
{
  private int roll;
  private String name;
  MyClass(int roll,String name)
  {
    this.roll = roll;
    this.name = name;
  }
  @Override
  public String toString()
  {
    return "roll="+roll+",name="+name;
  }
}
于 2013-03-19T17:29:59.590 に答える
2

. 自分のクラスでこれを行うにはどうすればよいか疑問に思っていましたか?

toString()クラスのメソッドをオーバーライドすることにより。

public class MyClass {
@override
public String toString(){
return "I am a legend MwhAhAH";
}
}

クラスで toStirng() をオーバーライドしない場合、Object#toString()が呼び出され、 が返されますyourclassname+ "@"+ hexnumberOfHashcode

public String toString() {
  237           return getClass().getName() + "@" + Integer.toHexString(hashCode());
  238       }

ArrayList は toString メソッドをオーバーライドします。

  public String toString() {
431        Iterator<E> i = iterator();
432        if (! i.hasNext())
433            return "[]";
434
435        StringBuilder sb = new StringBuilder();
436        sb.append('[');
437        for (;;) {
438            E e = i.next();
439            sb.append(e == this ? "(this Collection)" : e);
440            if (! i.hasNext())
441                return sb.append(']').toString();
442            sb.append(", ");
443        }
444    }
445
446} 
于 2013-03-19T17:27:52.837 に答える
1

オーバーライド

toString()方法。

このメソッドは、基本的に次のような出力を提供する Object クラスです。

getClass().getName() + '@' + Integer.toHexString(hashCode())

他のものを取得するには、クラスでこれをオーバーライドする必要があります。

例: ArrayList を出力すると、ArrayList@2144c53d の代わりに arraylist 要素が与えられます。

 public String toString() {
   return "Stackoverflow";
 }
于 2013-03-19T17:27:54.753 に答える
0

シンプルで、メソッドをオーバーライドする必要がありますtoString()

次のようなことを行う必要があります。

public class MyClass {
    @override
    public String toString(){
        return "My custom string, perhaps using some of the class propertis";
    }
}
于 2013-03-19T17:30:06.997 に答える