2010-11-05 17 views

risposta

14

Semplicemente così:

String.format(myString, myArray); 
+0

Questo non sembra funzionare per me per altri metodi vararg in java 1.8. – IARI

11

si dovrebbe solo essere in grado di chiamare

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

... supponendo che si desidera la args di essere i più valori. Se avete bisogno di avvolgimento in più, dovete farlo da soli:

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

In sostanza, se il tipo di argomento corrisponda già il tipo di matrice di parametri, il compilatore non fa alcun involucro.

Dalla JLS, sezione 15.12.4.2:

Se m viene richiamato con kn espressioni argomento effettivo, o, se m viene richiamato con k = n espressioni argomento effettivo e il tipo dell'espressione argomento kth non è un compito compatibile con T [], quindi la lista degli argomenti (e1, ..., en-1, en, ... ek) viene valutata come se fosse scritta come (e1, ..., en-1, nuovo T [] {en, ..., ek}).

Nota "Se" all'inizio - questo è ciò che effettivamente dice che se l'argomento è già a posto, non viene eseguito alcun ritorno.

4

in breve l'esempio: (S2 e I2 sono probabilmente le versioni più interessanti passano la varargs come 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 ) ; 

uscite:

## 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 
Problemi correlati