簡體   English   中英

如何將一組基元作為varargs傳遞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM