一部のクラス(例ArrayList
)のインスタンスをストリーム(例: System.out.println(
ArrayListのインスタンス)
)に出力すると、参照ID(例:ArrayList @ 2144c53d)は出力されませんが、実際の値はいくつかの形式(例:[1,2、 3,4])。自分のクラスでこれをどのように行うことができるのでしょうか。おそらく、メソッドを定義したり、インターフェイスを実装したりする必要がありますか?
5 に答える
シンプル: メソッドをオーバーライドします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
インターフェースの実装を検討することをお勧めします。ただし、私は個人的に実装したことはありません。
を使用してクラスのオブジェクトを出力しようとすると、そのクラスのメソッドが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;
}
}
. 自分のクラスでこれを行うにはどうすればよいか疑問に思っていましたか?
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}
オーバーライド
toString()
方法。
このメソッドは、基本的に次のような出力を提供する Object クラスです。
getClass().getName() + '@' + Integer.toHexString(hashCode())
他のものを取得するには、クラスでこれをオーバーライドする必要があります。
例: ArrayList を出力すると、ArrayList@2144c53d の代わりに arraylist 要素が与えられます。
public String toString() {
return "Stackoverflow";
}
シンプルで、メソッドをオーバーライドする必要がありますtoString()
。
次のようなことを行う必要があります。
public class MyClass {
@override
public String toString(){
return "My custom string, perhaps using some of the class propertis";
}
}