7
我試圖在下面的示例中使用的參考方法用表達ArrayType[]::new
:與數組構造參考方法
public class Main
{
public static void main(String[] args)
{
test1(3,A[]::new);
test2(x -> new A[] { new A(), new A(), new A() });
test3(A::new);
}
static void test1(int size, IntFunction<A[]> s)
{
System.out.println(Arrays.toString(s.apply(size)));
}
static void test2(IntFunction<A[]> s)
{
System.out.println(Arrays.toString(s.apply(3)));
}
static void test3(Supplier<A> s)
{
System.out.println(s.get());
}
}
class A
{
static int count = 0;
int value = 0;
A()
{
value = count++;
}
public String toString()
{
return Integer.toString(value);
}
}
輸出
[null, null, null]
[0, 1, 2]
3
但我得到在方法test1
僅是一個陣列使用null元素時,不應該使用表達式ArrayType[]::new
創建一個具有指定大小的數組,併爲每個元素調用類A
的構造,就像使用e方法test3
中的表達式Type::new
?
謝謝您的詳細和明確的解釋。這是非常有幫助和可以理解的。 –
@NarutoBijuMode不客氣! – Eran
作爲附錄,可以通過'test1(3,i - > Stream.generate(A :: new).limit(i).toArray(A [] :: new));'' – Holger