cuốn sách gpt4 ai đã làm

Tại sao StringBuilder::append lại là BiConsumer?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 11:12:48 28 4
mua khóa gpt4 Nike

Tôi đã tìm thấy một ví dụ thú vị khi sử dụng API Stream:

Stream stream = Stream.of("w", "o", "l", "f");
BiConsumer nối thêm = StringBuilder::append;
StringBuilder đã thu thập =stream.collect(StringBuilder::new,append, StringBuilder::append);
System.out.println(đã thu thập); //nó hoạt động chính xác

Stream.collect có ba tham số:

Nhà cung cấp nhà cung cấp, bộ tích lũy BiConsumer, bộ kết hợp BiConsumer

BiConsumer nhận hai tham số và không trả về gì. Tại sao dòng này biên dịch và chạy?

BiConsumer nối thêm = StringBuilder::append;

StringBuilder không có phương thức void nối thêm (java.lang.StringBuilder, java.lang.String).

câu trả lời hay nhất

JLS 15.13.3Một bộ thu được chỉ định ít nhiều (đối tượng mà phương thức đang được gọi) có thể là tham số đầu tiên của giao diện chức năng:

Nếu biểu mẫu là ReferenceType :: [TypeArguments] Identifier thì phần thân của phương thức gọi tương tự có tác dụng của một biểu thức gọi phương thức cho một khai báo thời gian biên dịch là khai báo thời gian biên dịch của biểu thức tham chiếu phương thức. của biểu thức gọi phương thức được quy định trong §15.12.4.3, §15.12.4.4 và §15.12.4.5, trong đó:

Chế độ gọi được bắt nguồn từ khai báo thời gian biên dịch như được chỉ định trong §15.12.3.

Nếu khai báo tại thời điểm biên dịch là một phương thức phiên bản thì tham chiếu đích là tham số chính thức đầu tiên của phương thức gọi.

Nếu khai báo tại thời điểm biên dịch là một phương thức phiên bản thì các đối số cho biểu thức gọi phương thức (nếu có) là các tham số chính thức thứ hai và tiếp theo của phương thức gọi đó. phương pháp triệu tập.

Khai báo tại thời điểm biên dịch thực sự là một phương thức cá thể, vì vậyStringBuilderTrở thành tham số đầu tiên của phương thức gọi,Stringtrở thành tham số thứ hai.

Nói cách khác, tham chiếu phương thức SomeClass::instancePhương thức Tương đương với lambda (SomeClass nhận, args...) ->receiver.instanceMethod(args...).

Giới thiệu về java - Tại sao StringBuilder::append BiConsumer? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45807584/

28 4 0
Bài viết khuyến nghị: Cách chia DL ở cấp độ DT
Bài viết khuyến nghị: Tạo hàng hiệu quả dựa trên ngày Pandas
Bài viết khuyến nghị: javascript - hoạt hình khối mờ dần toàn màn hình
Bài viết khuyến nghị: python - Cột không bị xóa
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress