雖然數組可以在for-each循環中使用,但它們不實現Iterable
。只有兩種可能性,要麼按照您所說的那樣超載該方法,要麼只提供可迭代的變體並強制客戶端撥打Arrays.asList()
。
如果你也想提供陣列超載
,你可能會從簡單的數組改變其簽名,以可變參數:
public void foo(String... myStrings){
foo(java.util.Arrays.asList(myStrings));
}
在這種情況下,要注意基本數組和原始的方式包裝陣列之間的不相容性:
static void foo(int... ints) {}
foo(new Integer[] {1, 2}); // compile error
和:
static void foo(Integer... integers) {}
foo(new int[] { 1, 2 }); // compile error
而最晦澀一部分,與通用的可變參數:
static <T> T[] foo(T... ts) {
return ts;
}
如果傳遞整數數組:
Integer[] integers = { 1, 2 };
System.out.println(Arrays.deepToString(foo(integers)));
> [1, 2]
的ts
的值是整數的數組具有2個元素:1
和2
。
然而,如果傳遞原始整數的數組,一個有趣的事情發生:
int[] ints = { 1, 2 };
System.out.println(Arrays.deepToString(foo(ints)));
> [[1, 2]]
在這種情況下,TS的值INT數組的數組(int[][]
)僅具有一個元素,該元素是最初傳入的數組。原因是int
不是Object
(自動裝箱在這裏沒有幫助),而int是一個數組,因此T
類型參數的值變爲int[]
。
謝謝,我想我仍然試圖說服它的內心深處它是Python的Java。 – BostonJohn
哈哈,這裏沒有打字的鴨子 - 對不起。 :) –
歡迎來到詳細輸入的世界。 Java的基礎是WET而不是DRY的原則(如在寫一切而不是不重複自己)。 – akuhn