2011-11-03 13 views
6

estoy trabajando en Java en un proyecto que me obliga a hacer un par de clases del 'contenedor', si se quiere. Aquí está una versión simple de uno:Cómo crear un método println/impresión para una clase personalizada

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

(. Tenga en cuenta, esto es severamente simplificada y estoy usando conjunto adecuado/llegar métodos en la versión final)

Mi pregunta es la siguiente:

al llamar al método println con un ArrayList como parámetro, por ejemplo:

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

Java automáticamente sabe cómo imprimir cada 'nodo' o elemento del ArrayList correctamente.

¿Hay una manera de escribir un método para permitir que el método println para imprimir correctamente mi clase Par?

Respuesta

12

Usted tendrá que reemplazar el método toString y devolver una representación de cadena de lo que quiere.

Así, por ejemplo:

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

de lo que puede hacer lo siguiente:

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

Perfecto. ¡Gracias! – Proxy404

4

Necesita anular 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

debe decir 'public String toString() ' – jxmorris12

1

Vas a tener que definir un método toString(). Se llama automáticamente por System.out.println(Object o). La clase ArrayList tiene un método tal reemplazado toString() que proporciona una representación muy bien formateado.

Básicamente, anulando Object.toString con su propia definición es todo lo que se requiere.

1

se puede anular el método de la clase personalizada e imprimir toString() la información que desee.

@Override 
public String toString() { 

    return .....; 
    } 
1

Se podría extender ArrayList y anular el método toString():

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

pero esto es una exageración. Solo escribiría un método de utilidad de impresión.

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 

Lienzo:

123 Este St.
atún grande, Tejas

456 Para que San
Phoenix, Arizona

Cuestiones relacionadas