2010-11-05 44 views

回答

14

只要這樣的:

String.format(myString, myArray); 
+0

這似乎並不適用於java 1.8中的其他可變參數方法。 – IARI 2017-05-12 01:03:08

11

你應該只能夠調用

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

...假設你想要的args是多值。如果你需要額外的包裝,你必須自己做:

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

基本上,如果參數類型總是匹配參數數組類型,編譯器不會做任何包裝。

從JLS,部分15.12.4.2

如果M是被調用以KN實際參數表達式,或者,如果m爲正在與K = N實際參數表達式和第k個參數表達式的類型調用不與T []賦值兼容,那麼參數列表(e1,...,en-1,en,... ek)被評估爲好像它被寫爲(e1,...,en-1,新的T [] {en,...,ek})。

請注意開始處的「If」 - 這就是有效地說如果參數已經很好,則不執行包裝。

總之
4

通過例如: (S2I2有可能通過的可變參數作爲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 ) ; 

輸出:

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