Tôi đang cố gắng gọi String.format()
có một số String
và Object[]
. Tôi làm nó như thế nào?Làm thế nào để gọi phương thức "vararg" với một mảng tham số?
Trả lời
Đơn giản chỉ cần như thế:
String.format(myString, myArray);
Đ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
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.
trong ngắn hạn bằng ví dụ: (S2 và I2 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
- 1. Làm thế nào tôi có thể truyền một mảng làm tham số cho một hàm vararg?
- 2. thế nào gọi phương thức vararg java từ C với valist
- 3. Gọi phương thức obj-c với tham số
- 4. Làm thế nào để vượt qua một ArrayList đến một phương thức mong đợi một vararg (Object ...)?
- 5. Flex Làm thế nào để gọi một chức năng với một số biến số tham số?
- 6. Làm thế nào để vượt qua mảng như tham số trong phương thức java?
- 7. Làm thế nào để gọi phương thức didSelectRowAtIndexPath với UITapGestureRecognizer?
- 8. Gọi phương thức lớp php từ chuỗi với tham số
- 9. Gửi yếu tố của một mảng làm tham số cho một phương pháp gọi
- 10. Gọi phương thức Java varargs với đối số null đơn?
- 11. Làm thế nào để gọi một phương thức thông qua sự phản chiếu với một biểu thức lambda như một tham số?
- 12. Làm thế nào để gọi một phương thức từ phương thức khác trong Mục tiêu C?
- 13. Làm thế nào để giải nén một mảng vào các đối số khác nhau về phương thức gọi
- 14. Làm thế nào để thêm tham số bổ sung trên một hình thức, trình nó với phương thức GET
- 15. Làm thế nào để khai báo một tham số phương thức như bất kỳ enum
- 16. Làm cách nào để chuyển một tham số bổ sung vào hàm gọi lại trong phương thức Javascript .filter()?
- 17. Làm thế nào để truyền một mảng và một phần tử đơn lẻ cho một phương thức nhiều đối số?
- 18. Làm cách nào để gọi một số phương thức chặn với thời gian chờ trong Java?
- 19. Làm cách nào để gọi phương thức có tham số đầu ra trong PowerShell?
- 20. Làm cách nào để chuyển các tham số cho phương thức gọi lại jQuery $ .getJSON?
- 21. Gọi phương pháp hoặc phương pháp trực tiếp với tham số/biến/tham số trong EL
- 22. Làm cách nào để chuyển các tham số cho phương thức gọi lại JQuery $ .getJSON?
- 23. Ruby - Giá trị truyền phương thức cuộc gọi của mảng như mỗi tham số
- 24. Gọi một phương thức với tham số bên trong vòng lặp JSTL
- 25. Làm thế nào để bạn có thể lập trình xác định số tham chiếu đến một phương thức với C#
- 26. làm thế nào để vượt qua một String * scala vararg đến một phương pháp java sử dụng Scala 2,8
- 27. Python phương pháp tĩnh - làm thế nào để gọi một phương thức từ phương pháp khác
- 28. Làm thế nào để truyền tham số cho phương thức ThreadStart trong Thread?
- 29. Khởi tạo một mảng chuỗi trong một lời gọi phương thức như một tham số trong C#
- 30. Làm thế nào để gọi phương thức mở rộng có cùng tên với một phương thức hiện có?
Bạn chính xác "đang cố gắng" như thế nào? Và chuyện gì đang xảy ra? –