2010-11-05 26 views

Trả lời

14

Đơn giản chỉ cần như thế:

String.format(myString, myArray); 
+0

Điều này dường như không làm việc cho tôi đối với các phương pháp vararg khác trong java 1.8. – IARI

11

Bạn nên chỉ có thể gọi

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

... giả sử bạn muốn args là nhiều giá trị. Nếu bạn cần gói thêm, bạn phải tự làm điều đó:

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

Về cơ bản, nếu loại đối số đã khớp với loại mảng tham số, trình biên dịch không thực hiện bất kỳ gói nào.

Từ JLS, phần 15.12.4.2:

Nếu m được gọi với các biểu thức lý luận thực tế kn, hoặc, nếu m đang được gọi với k = n biểu tranh luận thực tế và các loại hình biểu tranh luận thứ k không gán tương thích với T [], sau đó danh sách đối số (e1, ..., en-1, en, ... ek) được đánh giá như thể nó được viết là (e1, ..., en-1, mới T [] {en, ..., ek}).

Lưu ý "Nếu" ở đầu - đó là những gì có hiệu quả nói rằng nếu đối số đã ổn, không gói nào được thực hiện.

4

trong ngắn hạn bằng ví dụ: (S2I2 có nhiều khả năng các phiên bản thú vị nhất qua các varargs như một 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 ) ; 

kết quả đầu ra:

## 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 
Các vấn đề liên quan