我是Java 8的新手,我遇到了Consumer java文檔,它說:「消費者需要通過副作用來操作。」請有人解釋爲什麼這樣說?Java 8消費者和副作用
8
A
回答
4
根據Consumer
javadoc,必須用具有簽名void accept(T)
的方法聲明消費者。因此,該方法無法返回值。如果它沒有副作用,它將不具備任何效果。
+0
謝謝。我明白了你的觀點。 – user6348242
0
大多數功能接口只是用於接口,它嚴格意味着它們接受輸入,進行一些計算並返回輸出。他們不應該修改任何狀態。 Consumer
是例外,因爲它不返回任何值;其目的僅僅是修改某些州。
7
消費者有方法accept
具有以下簽名
void accept(T t);
該方法將T作爲輸入,不返回任何東西(空),因此你不能從它返回任何東西和更換方法用它返回的值調用。
的副作用會打印指令的例子,
list.stream.foreach(System.out::println);
的foreach需要消費作爲參數。如果你仔細想想,你能用這種方法做的唯一有用的事情就是改變世界(即改變一個狀態)。
的那會一個pure function,即不發生變異的任何狀態的功能,它需要一個輸入,並返回的東西,例如
Function<Integer,Integer> fn = x -> x*x;
fn
這裏沒有任何副作用的相反(它不會改變任何東西),它會收到一個整數並和平地返回它的正方形。
相關問題
- 1. 生產者消費者在PHP和Java
- 2. Java線程生產者和消費者
- 3. Java生產者 - 消費者:生產者不「通知()」消費者
- 4. 消費消費使用卡夫卡消費者 - Java
- 5. 消費者和提供者
- 6. KAFKA Java消費者不工作
- 7. Java,FTP和多個消費者
- 8. Java消費者羣失蹤?
- 9. OpenID消費者爲JAVA GAE
- 10. oauth消費者密鑰和消費者機密註冊
- 11. 的Windows 8消費者預覽「System.Security.VerificationException」
- 12. 使用java和spring生產者 - 消費者模式
- 13. java線程:生產者 - 消費者
- 14. 生產者消費者變種java BlockingQueues
- 15. 生產者消費者在Java中
- 16. Java的消費者/生產者
- 17. Java生產者消費者線程
- 18. Java生產者,蟒蛇消費者,ActiveMQ
- 19. 如何使用消費者和供應商,而不是反思java 8
- 20. REST客戶端:Java後端的消費和Java腳本消費者
- 21. Java 8:獲取消費者<?>基礎函數註釋
- 22. 來自magento的消費者密鑰和消費者密鑰
- 23. Api和消費者流程
- 24. 消費者生產者多線程消費者不會消逝
- 25. Clojure生產者消費者
- 26. 生產者/消費者工作隊列
- 27. 消費者過濾的生產者 - 消費者阻塞隊列
- 28. RabbitMQ消費者
- 29. 消費者池
- 30. 卡夫卡消費者不消費
如果你不習慣函數式編程,那麼這種語言對你來說並不重要。這個想法是,「純粹」函數只能從它們的輸入中讀取,並且只寫入它們的返回值(所以不會有副作用 - 運行函數的唯一影響是您得到返回值。)函數(修改數據結構,運行IO等),據說有副作用。沒有返回值的函數最好有副作用,否則它沒有做任何事情。 –