2011-11-03 5 views
6

私はいくつかの 'コンテナ'クラスを作成する必要があるプロジェクトでJavaで作業しています。カスタムクラスのprintln/printメソッドを作成する方法

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; } 
} 

(。これは私が最終版のメソッドを取得/適切なセットを使用しています深刻な簡略化され、注意してください)

私の質問はこれです:ここでは1の簡易版です例えば、パラメータとしてArrayListのでのprintlnメソッドを呼び出すとき

ArrayList<String> arr = new ArrayList<String>(); 
arr.add("one"); 
arr.add("two"); 
System.out.println(arr); 

Javaが自動的に正しくArrayListのそれぞれの「ノード」または要素を印刷する方法を知っています。

printlnメソッドでPairクラスを正しく印刷できるようにするメソッドを記述する方法はありますか?

答えて

12

あなたは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); 
} 
+0

パーフェクト。ありがとう! – Proxy404

4

あなたは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(); 
    } 
} 
+1

は( '公共のStringのtoStringを言う必要があります) ' – jxmorris12

1

あなたはtoString()メソッドを定義する必要があります。それはSystem.out.println(Object o)によって自動的に呼び出されます。 ArrayListクラスは、きちんとフォーマットされた表現を提供するようなオーバーライドされたtoString()メソッドを持っています。

基本的には、独自の定義でObject.toStringを上書きするだけで済みます。

1

カスタムクラスのtoString()メソッドをオーバーライドして、必要な情報を印刷できます。

@Override 
public String toString() { 

    return .....; 
    } 
1

あなたは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; 
    } 
} 
0
/** 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このセント
ビッグマグロ、テキサス

456セント
フェニックス、アリゾナ州

関連する問題