2010-11-05 628 views

Respuesta

14

simplemente así:

String.format(myString, myArray); 
+0

Esto no parece funcionar para otros métodos vararg en Java 1.8. – IARI

11

sólo debe ser capaz de llamar

String text = String.format(formatString, args); 

... suponiendo que desea que el args a ser los valores múltiples. Si necesita envoltura adicional, usted tiene que hacerlo usted mismo:

String text = String.format(formatString, new Object[] { args }); 

Básicamente, si el tipo de argumento que ya coincide con el parámetro tipo de matriz, el compilador no hace ningún envoltorio.

Desde el JLS, sección 15.12.4.2:

Si m se invoca con expresiones argumento real kn, o, si m está siendo invocado con k = n expresiones argumento actual y el tipo de la expresión argumento k-ésimo no es la asignación compatible con T [], entonces la lista de argumentos (e1, ..., en-1, en, ... ek) se evalúa como si estuviera escrita como (e1, ..., en-1, nueva T [] {en, ..., ek}).

Tenga en cuenta el "Si" al principio - eso es lo que efectivamente dice que si el argumento ya está bien, no se realiza ningún ajuste.

4

en definitiva por ejemplo: (S2 y I2 son probablemente las versiones más interesantes que pasan la varargs como un Object[])

PrintStream ps = System.out ; 

String[] sarr = new String[] { "a" , "b" } ; 
Object  os = sarr ; 

int[]  iarr = new int[]  { 1 , 2 } ; // cannot be cast to Object[] - see I6 below 
Integer[] ioarr = new Integer[] { 1 , 2 } ; // can be cast to Object[] - see I2 below 
Object  oi = iarr ;      // cannot be cast to Object[] - see I6 below 

ps.printf("%n## Strings:%n%n") ; 

ps.printf("S1: pass as single objects:   %s, %s%n" ,   "a" , "b") ; 
ps.printf("S2: pass as varargs objects:   %s, %s%n" , (Object[]) sarr  ) ; 
ps.printf("S3: pass as single objects:   %s, %s%n" ,   sarr , "c") ; 
ps.printf("S4: pass as single objects:   %s, %s%n" ,   os , "c") ; 
// ps.printf("S5: MissingFormatArgumentException: %s, %s%n" ,   os ) ; 
// ps.printf("S6: ClassCastException:    %s, %s%n" , (Object[]) os ) ; 

ps.printf("%n## int:%n%n") ; 

ps.printf("I1: pass as single objects:   %s, %s%n" ,   1  , 2) ; 
ps.printf("I2: pass as varargs objects:   %s, %s%n" , (Object[]) ioarr) ; 
ps.printf("I3: pass as single objects:   %s, %s%n" ,   iarr , 3) ; 
ps.printf("I4: pass as single objects:   %s, %s%n" ,   oi , 3) ; 
// ps.printf("I5: MissingFormatArgumentException %s, %s%n" ,   iarr ) ; 
// ps.printf("I6: ClassCastException:    %s, %s%n" , (Object[]) oi ) ; 

salidas:

## Strings: 

S1: pass as single objects:    a, b 
S2: pass as varargs objects:    a, b 
S3: pass as single objects:    [Ljava.lang.String;@ad02649, c 
S4: pass as single objects:    [Ljava.lang.String;@ad02649, c 

## int: 

I1: pass as single objects:    1, 2 
I2: pass as varargs objects:    1, 2 
I3: pass as single objects:    [[email protected], 3 
I4: pass as single objects:    [[email protected], 3 
Cuestiones relacionadas