私はJavaで、必要に応じていくつかの「コンテナ」クラスを作成する必要があるプロジェクトに取り組んでいます。これは単純なバージョンです。
public class Pair{
Object KEY;
Object VALUE;
public Pair(Object k, Object v)
{
KEY = k;
VALUE = v;
}
public Object getKey()
{ return KEY; }
public Object getValue()
{ return VALUE; }
}
(これは大幅に簡略化されており、最終バージョンでは適切なset/getメソッドを使用していることに注意してください。)
私の質問はこれです:
ArrayListをパラメーターとしてprintlnメソッドを呼び出す場合、次に例を示します。
ArrayList<String> arr = new ArrayList<String>();
arr.add("one");
arr.add("two");
System.out.println(arr);
Javaは、ArrayListの各「ノード」または要素を正しく出力する方法を自動的に認識します。
printlnメソッドがPairクラスを正しく出力できるようにするメソッドを作成する方法はありますか?
toString
メソッドをオーバーライドして、必要な文字列表現を返す必要があります。
したがって、たとえば:
public class Pair {
Object key;
Object value;
public Pair(Object k, Object v)
{
key = k;
value = v;
}
public Object getKey() {
return key;
}
public Object getValue() {
return value;
}
public String toString() {
return "Key: " + getKey() + ", Value: " + getValue();
}
}
あなたがすることができるより:
List<Pair> pairs = new ArrayList<Pair>();
pairs.Add(new Pair("pair1key", "pair1value"));
pairs.Add(new Pair("pair2key", "pair2value"));
for (Pair p : pairs) {
System.out.println(p);
}
toString()
をオーバーライドする必要があります。
public class Pair
{
KeyObject key;
ValueObject value;
public Pair(KeyObject k, ValueObject v)
{
key = k;
vale = v;
}
// ...
@Override
public String toString()
{
return "Key: " + key.getKey() + " - Vlaue: " value.getValue();
}
}
カスタムクラスのtoString()
メソッドをオーバーライドして、必要な情報を出力できます。
@Override
public String toString() {
return .....;
}
toString()
メソッドを定義する必要があります。 System.out.println(Object o)
によって自動的に呼び出されます。 ArrayList
クラスにはそのようなオーバーライドされたtoString()
メソッドがあり、適切にフォーマットされた表現を提供します。
基本的に、必要なのは Object.toString を独自の定義でオーバーライドすることだけです。
ArrayList
を拡張し、toString()
メソッドをオーバーライドできます。
public class MyArrayList<T> extends ArrayList<T> {
@Override
public String toString() {
// format your print here...
}
}
しかし、これはやり過ぎです。印刷ユーティリティメソッドを書くだけです。
public class MyUtils {
public String toString( ArrayList<? extends Object> ) {
// format your print here;
}
}
/** demo print of an ArrayList of Address objects using overridden toString() method */
import Java.util.ArrayList;
public class Address {
// simple address fields (incomplete)
private String addrLine1;
private String city;
private String state;
// run sample program
public static void main(String[] args) { new Address().run(); }
public void run() {
// instantiate example Address records
Address addr1 = new Address();
Address addr2 = new Address();
// add example field data
addr1.addrLine1 = "123 This St.";
addr1.city = "Big Tuna";
addr1.state = "Texas";
addr2.addrLine1 = "456 That St.";
addr2.city = "Phoenix";
addr2.state = "Arizona";
// create ArrayList<Address>, add instances
ArrayList<Address> addrArray = new ArrayList<>();
addrArray.add(addr1);
addrArray.add(addr2);
// print Address instance fields in addrArray
for ( Address addr : addrArray )
System.out.println(addr);
} // end run()
// overriding toString() method
@Override public String toString()
return "\n" + addrLine1 + "\n" + city + ", " + state;
} // end class Address
プリント:
123 This St.
テキサス州ビッグマグロ
456その聖。
アリゾナ州フェニックス