Tôi cố gắng để sử dụng phương pháp tham khảo với biểu ArrayType[]::new
trong ví dụ sau:phương pháp tham khảo với nhà xây dựng mảng
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);
}
}
Output
[null, null, null]
[0, 1, 2]
3
Nhưng những gì tôi nhận được trong phương pháp test1
chỉ là một mảng với các phần tử rỗng, không nên biểu thức ArrayType[]::new
tạo một mảng với kích thước được chỉ định và gọi cấu trúc lớp A
cho mỗi phần tử như những gì xảy ra khi sử dụng e xpression Type::new
theo phương pháp test3
?
Cảm ơn bạn đã giải thích chi tiết và rõ ràng. Nó rất hữu ích và dễ hiểu. –
@NarutoBijuMode Bạn được chào đón! – Eran
Là phụ lục, hoạt động mong muốn có thể đạt được thông qua 'test1 (3, i -> Stream.generate (A :: mới) .limit (i) .toArray (A [] :: new));' – Holger