[英]How to pass an array of primitives as varargs?
我試圖將一個原語數組(在我的情況下是一個int[]
)傳遞給一個帶有varargs的方法。
讓我們說:
// prints: 1 2
System.out.println(String.format("%s %s", new String[] { "1", "2"}));
// fails with java.util.MissingFormatArgumentException: Format specifier '%s'
System.out.println(String.format("%s %s", new int[] { 1, 2 }));
但請注意,第一行會收到以下警告:
類型String []的方法格式(String,Object ...)的最后一個參數與vararg參數類型不完全匹配。 轉換為Object []以確認非varargs調用,或者為varargs調用傳遞Object類型的各個參數。
另請注意,我不使用構造函數輸入數組,但是我從封閉方法中獲取它,其簽名我無法更改,例如:
private String myFormat(int[] ints) {
// whatever format it is, it's just an example, assuming the number of ints
// is greater than the number of the format specifiers
return String.format("%s %s %s %s", ints);
}
String.format(String format, Object... args)
正在等待Object
varargs作為參數。 由於int
是一個原語,而Integer
是一個java Object
,你的確應該將int[]
轉換為Integer[]
。
要做到這一點,你可以使用nedmund答案,如果你使用的是Java 7,或者使用Java 8,你可以使用它:
Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new );
或者,如果您不需要Integer[]
,如果Object[]
足以滿足您的需要,您可以使用:
Object[] what = Arrays.stream( data ).boxed().toArray();
您可以使用包裝類Integer
,即
System.out.println(String.format("%s %s", new Integer[] { 1, 2 }));
這是你如何轉換現有的int[]
數組:
int[] ints = new int[] { 1, 2 };
Integer[] castArray = new Integer[ints.length];
for (int i = 0; i < ints.length; i++) {
castArray[i] = Integer.valueOf(ints[i]);
}
System.out.println(String.format("%s %s", castArray));
int varargs to object varargs,創建一個帶空格分隔符的格式化程序
private void method( int ... values) {
String.format(StringUtils.repeat("%d", " ", values.length), Arrays.stream( values ).boxed().toArray());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.