我正在嘗試撥打電子郵件String.format()
,電子郵件地址爲String
和Object[]
。我該怎麼做?如何使用params數組調用「vararg」方法?
5
A
回答
14
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
通過例如: (S2和I2有可能通過的可變參數作爲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
相關問題
- 1. 如何使用params數組調用var-args成員函數?
- 2. 如何使用intent params來驗證調用onActivityResults()方法的調用者?
- 3. 方法的調用('params'/ generic表兄弟)
- 4. 構造PARAMS與方法調用
- 5. 如何使用無對象的數組調用方法?
- 6. Java方法調用數組
- 7. 可以用params來調用強類型參數的方法嗎?
- 8. 如何驗證多種方法不同PARAMS調用
- 9. 使用方法數組上的索引調用方法
- 10. 如何在數組中使用方法?
- 11. params方法如何工作?
- 12. 如何使用queryString或任何其他方法解析url params
- 13. C#方法,使用params關鍵字
- 14. 如何調用子組件的方法?
- 15. 在ES6類的數組中使用回調的調用方法
- 16. 使用組件調用父方法
- 17. 如何用數組調用此方法?有可能嗎?
- 18. 如何使用jQuery Javascript中的數組參數調用ASP.net web方法?
- 19. 如何使用反射調用方法
- 20. 如何使用NSInvocation調用類方法?
- 21. 如何使用REST調用方法
- 22. 方法調用數組參數
- 23. 如何反思使用out params的方法?
- 24. 使用數組的方法
- 25. 如何使用vue-router params
- 26. 如何使用params [:id]
- 27. 如何使用佈局PARAMS
- 28. 如何在rails 3的當前params []數組中使用redirect_to()?
- 29. 如何正確使用load數組和保存數組方法?
- 30. Object vararg和int vararg編譯錯誤
你究竟如何「嘗試」?發生了什麼? – 2010-11-05 16:00:06