Tôi mới dùng Java 8, tôi đã xem qua tài liệu java của người tiêu dùng và nó nói, "Người tiêu dùng dự kiến sẽ hoạt động thông qua các tác dụng phụ." Ai đó có thể giải thích tại sao nó được nói như vậy?Java 8 Người tiêu dùng và các tác dụng phụ
Trả lời
Theo số Consumer
javadoc, người tiêu dùng phải được khai báo bằng phương thức có chữ ký void accept(T)
. Kết quả là, phương thức không thể trả về một giá trị. Nếu nó không có tác dụng phụ, nó sẽ không có khả năng thực hiện bất kỳ hiệu ứng nào.
Cảm ơn. Tôi có điểm số của bạn. – user6348242
Hầu hết các giao diện chức năng chỉ có nghĩa là - chức năng giao diện, có nghĩa là chúng chấp nhận đầu vào, thực hiện một số phép tính và trả về kết quả. Chúng không được sửa đổi bất kỳ trạng thái nào. Consumer
là ngoại lệ vì nó không trả về bất kỳ giá trị nào; mục đích của nó là chỉ sửa đổi một số trạng thái.
tiêu dùng có phương pháp accept
với chữ ký sau
void accept(T t);
Phương pháp này có t như một đầu vào và không trả lại bất cứ điều gì (void), và do đó bạn không thể quay trở lại bất cứ điều gì từ nó và thay thế phương pháp này gọi với giá trị trả về.
Một ví dụ về tác dụng phụ sẽ trình bày in ấn,
list.stream.foreach(System.out::println);
foreach mất một người tiêu dùng như một cuộc tranh cãi. Nếu bạn nghĩ về nó, điều hữu ích duy nhất bạn có thể làm với một phương pháp như vậy là thay đổi thế giới (tức là, biến đổi một trạng thái).
Điều ngược lại điều đó sẽ là một pure function, một chức năng mà không đột biến bất cứ tiểu bang, phải mất một đầu vào, và trả về một cái gì đó, ví dụ
Function<Integer,Integer> fn = x -> x*x;
fn
đây không có bất kỳ tác dụng phụ (nó không biến đổi bất cứ điều gì), nó nhận được một số nguyên và trả về một cách hòa bình hình vuông của nó.
- 1. Sử dụng Java làm phụ trợ và PHP làm giao diện người dùng
- 2. IE 11 gửi tiêu đề Tác nhân người dùng khác nhau đến các tên miền phụ khác nhau
- 3. Người tiêu dùng OpenID cho JAVA GAE
- 4. Soạn một hàm Java và người tiêu dùng
- 5. Java 8 Luồng để thao tác chuỗi
- 6. Phương sai loại Java, người tiêu dùng loại chung
- 7. Giao diện người dùng và phụ trợ riêng biệt với khung công tác Yii
- 8. Tiêu chuẩn JPA2 và Java 8 Date & Time API
- 9. Tác nhân người dùng CURL
- 10. Người tiêu dùng sản xuất Java với điều kiện dừng
- 11. Tác dụng phụ LD_LIBRARY_PATH
- 12. Tác nhân người dùng Android HTTP
- 13. Tác nhân người dùng WebView
- 14. JMS Người tiêu dùng độc lập với ActiveMQ và Spring
- 15. Akka-http: Cách lấy tiêu đề Tác nhân người dùng từ tiêu đề yêu cầu?
- 16. tác vụ và bỏ chặn giao diện người dùng
- 17. Lỗi iOS 8 Touch ID "Yêu cầu tương tác người dùng".
- 18. Ứng dụng web Java cho 5000 ~ Người dùng
- 19. Tương tác với các chuỗi giao diện người dùng trong Java/J2ME
- 20. Một người tiêu dùng ActiveMQ chậm khiến người tiêu dùng chậm chậm
- 21. Đặt tác nhân người dùng trong httpclient Java và cho phép chuyển hướng đến đúng
- 22. Sử dụng web.config để cấm tác nhân người dùng
- 23. Cách lấy khóa người tiêu dùng và bí mật của người tiêu dùng đối với api gmail?
- 24. Đặt tác nhân người dùng khi sử dụng XmlTextReader
- 25. Tác nhân người dùng trong các yêu cầu HTTP, Ruby
- 26. Đặt tác nhân người dùng trong AFNetworking
- 27. Cung cấp cho ứng dụng Java Giao diện và cảm nhận của Metro trong Windows 8
- 28. RabbitMQ người tiêu dùng hoạt động duy nhất với người tiêu dùng chuyển đổi thụ động
- 29. Tương tác của người dùng trên UIImageView
- 30. Tác nhân người dùng iPad là gì?
Nếu bạn không quen với lập trình hàm, ngôn ngữ đó sẽ không có ý nghĩa gì đối với bạn. Ý tưởng là các hàm "thuần" chỉ đọc từ đầu vào của chúng, và chỉ ghi vào giá trị trả về của chúng (vì vậy sẽ không có tác dụng phụ - hiệu ứng duy nhất của việc chạy hàm là bạn nhận được giá trị trả về.) một cái gì đó (sửa đổi một cấu trúc dữ liệu, chạy IO, vv), được cho là có tác dụng phụ. Một hàm không có giá trị trả lại tốt hơn có tác dụng phụ, hoặc nếu không nó không làm gì cả. –