2011-11-03 16 views
6

Pracuję w Javie nad projektem, który wymaga ode mnie utworzenia kilku klas "kontenerów". Oto prosty wersja jednego:Jak utworzyć metodę println/print dla niestandardowej klasy

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

(. Proszę pamiętać, że jest to surowo uproszczony i używam właściwego zestawu/get metod w ostatecznej wersji)

Moje pytanie jest takie:

po wywołaniu metody println z ArrayList jako parametr, na przykład:

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

Java automatycznie wie jak poprawnie wydrukować każdy węzeł „” lub element ArrayList.

Czy istnieje sposób napisania metody zezwalającej metodzie println na prawidłowe wydrukowanie mojej klasy Pair?

Odpowiedz

12

Będziesz musiał zastąpić metodę toString i zwraca ciąg znaków reprezentujący co chcesz.

Tak na przykład:

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

niż można wykonać następujące czynności:

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

Idealny. Dzięki! – Proxy404

4

Trzeba zastąpić 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

powinna powiedzieć 'publicznego String toString() ' – jxmorris12

1

Musisz określić metodę toString(). Jest automatycznie wywoływana przez System.out.println(Object o). Klasa ArrayList ma nadpisaną metodę toString(), która zapewnia ładnie sformatowaną reprezentację.

Zasadniczo konieczne jest nadpisanie Object.toString z własną definicją.

1

Możesz zmienić metodę toString() swojej niestandardowej klasy i wydrukować dowolne informacje.

@Override 
public String toString() { 

    return .....; 
    } 
1

Można przedłużyć ArrayList i zastąpić metodę toString():

public class MyArrayList<T> extends ArrayList<T> { 
    @Override 
    public String toString() { 
     // format your print here... 
    } 
} 

Ale to przesada. Po prostu napiszę metodę drukowania.

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 

Wydruki:

123 Ta St.
Big Tuna, Teksas

456 To St.
Phoenix, Arizona

Powiązane problemy