2011-05-02 25 views
14

Quiero un método que bucle de cualquier tipo array e imprimirlas, he escrito lo siguiente:método genérico para imprimir todos los elementos de una matriz

public static <T> void printArray(T[] arr){ 
    for(T t: arr){ 
     System.out.print(t+" "); 
    } 
    System.out.println(""); 
} 

pero éste sólo funciona para las matrices de clase, qué si Tengo un char[] en lugar de un Character[], o un int[] en lugar de un Integer[], o ¿hay alguna forma de presentarlos antes? Gracias

+0

¿Qué hay de t.toString() en lugar de t + – Preston

+2

Desafortunadamente Array.toString() sólo llama Object.toString() y obtienes algo como '[C @ e6f8730' Le sugerí al líder del proyecto de monedas JDK 7 que arregle esto pero no se lo vendí. ;) –

+0

@ Peter buena sugerencia de Lawrey. ¿Cuál fue su argumento en contra? Que todos pueden hacer un gran uso de ese valor hash? – Bozho

Respuesta

24

java.util.Arrays.toString(array) debería hacer.

  • commons-lang también tienen que - ArrayUtils.toString(array) (pero prefieren el JDK uno)
  • commons-lang permite separador personalizado - StringUtils.join(array, ',')
  • guava permite también un separador, y tiene la opción de omitir los valores nulos: Joiner.on(',').skipNulls().join(array)

Todos estos devuelven un String, que puede entonces System.out.println(..) o logger.debug(..). Tenga en cuenta que estos le darán una entrada significativa si los elementos de la matriz han implementado toString() de una manera significativa.

Las dos últimas opciones, por desgracia, no tienen soporte para matrices primitivas, pero son buenas opciones para saber.

+1

No reinventar la rueda :) – slandau

+0

Guava's Joiner solo funciona para matrices * object *. Para las matrices primitivas, tiene el método join() en com.google.common.primitives (por ejemplo, Chars.join(): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common /primitives/Chars.html) –

+0

@eneveu que está en mi último párrafo;) – Bozho

0

No se puede pasar matrices primitivas con el método printarray()

+0

Gracias por responder, lo agradezco. – user685275

1

No puedes escribir una definición genérica para las matrices primitivas. En su lugar, puede utilizar la sobrecarga de métodos y escribir un método para cada tipo de matriz primitiva como este,

public static void printArray(int[] arr) 
public static void printArray(short[] arr) 
public static void printArray(long[] arr) 
public static void printArray(double[] arr) 
public static void printArray(float[] arr) 
public static void printArray(char[] arr) 
public static void printArray(byte[] arr) 
public static void printArray(boolean[] arr) 
+0

Gracias por responder, lo apreciamos. – user685275

Cuestiones relacionadas