欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Google Guava EventBus

系統(tǒng) 1832 0

在Google Guava 10版本引入了EventBus, 它主要用來(lái)簡(jiǎn)化我們處理生產(chǎn)/消費(fèi)者編程模型.?

基本用法 ?
使用Guava之后, 如果要訂閱消息, 就不用再繼承指定的接口, 只需要在指定的方法上加上@Subscribe注解即可:?

Java代碼?? 收藏代碼
  1. public ? class ?EventListener?{??
  2. ???
  3. ???? public ? int ?lastMessage?=? 0 ;??
  4. ???
  5. ???? @Subscribe ??
  6. ???? public ? void ?listen(OurTestEvent?event)?{??
  7. ????????lastMessage?=?event.getMessage();??
  8. ????}??
  9. ???
  10. ???? public ? int ?getLastMessage()?{??
  11. ???????? return ?lastMessage;??
  12. ????}??
  13. }??



上面的lastMessage用來(lái)接收消息.?

下面定義的類用來(lái)對(duì)消息進(jìn)行封裝:?

Java代碼?? 收藏代碼
  1. public ? class ?OurTestEvent?{??
  2. ???
  3. ???? private ? final ? int ?message;??
  4. ???
  5. ???? public ?OurTestEvent( int ?message)?{??
  6. ???????? this .message?=?message;??
  7. ????}??
  8. ???
  9. ???? public ? int ?getMessage()?{??
  10. ???????? return ?message;??
  11. ????}??
  12. }??



通過(guò)寫一個(gè)測(cè)試來(lái)了解EventBus如何工作:?

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?shouldReceiveEvent()? throws ?Exception?{??
  3. ???
  4. ???? //?given ??
  5. ????EventBus?eventBus?=? new ?EventBus( "test" );??
  6. ????EventListener?listener?=? new ?EventListener();??
  7. ???
  8. ????eventBus.register(listener);??
  9. ???
  10. ???? //?when ??
  11. ????eventBus.post( new ?OurTestEvent( 200 ));??
  12. ???
  13. ???? //?then ??
  14. ????assertThat(listener.getLastMessage()).isEqualTo( 200 );??
  15. }??



上面的測(cè)試是不是很簡(jiǎn)單??

MultiListener的使用 ?

只需要在要訂閱消息的方法上加上@Subscribe注解即可實(shí)現(xiàn)對(duì)多個(gè)消息的訂閱:?

Java代碼?? 收藏代碼
  1. public ? class ?MultipleListener?{??
  2. ???
  3. ???? public ?Integer?lastInteger;??
  4. ???? public ?Long?lastLong;??
  5. ???
  6. ???? @Subscribe ??
  7. ???? public ? void ?listenInteger(Integer?event)?{??
  8. ????????lastInteger?=?event;??
  9. ????}??
  10. ???
  11. ???? @Subscribe ??
  12. ???? public ? void ?listenLong(Long?event)?{??
  13. ????????lastLong?=?event;??
  14. ????}??
  15. ???
  16. ???? public ?Integer?getLastInteger()?{??
  17. ???????? return ?lastInteger;??
  18. ????}??
  19. ???
  20. ???? public ?Long?getLastLong()?{??
  21. ???????? return ?lastLong;??
  22. ????}??
  23. }??



下面是對(duì)應(yīng)的測(cè)試:?

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?shouldReceiveMultipleEvents()? throws ?Exception?{??
  3. ???
  4. ???? //?given ??
  5. ????EventBus?eventBus?=? new ?EventBus( "test" );??
  6. ????MultipleListener?multiListener?=? new ?MultipleListener();??
  7. ???
  8. ????eventBus.register(multiListener);??
  9. ???
  10. ???? //?when ??
  11. ????eventBus.post( new ?Integer( 100 ));??
  12. ????eventBus.post( new ?Long( 800 ));??
  13. ???
  14. ???? //?then ??
  15. ????assertThat(multiListener.getLastInteger()).isEqualTo( 100 );??
  16. ????assertThat(multiListener.getLastLong()).isEqualTo(800L);??
  17. }??



高級(jí)用法 ?

1.Dead Event ?

如果EventBus發(fā)送的消息都不是訂閱者關(guān)心的稱之為Dead Event. 看下面的例子:?

Java代碼?? 收藏代碼
  1. /** ?
  2. ?*?Listener?waiting?for?the?event?that?any?message?was?posted?but?not?delivered?to?anyone ?
  3. ?*/ ??
  4. public ? class ?DeadEventListener?{??
  5. ???
  6. ???? boolean ?notDelivered?=? false ;??
  7. ???
  8. ???? @Subscribe ??
  9. ???? public ? void ?listen(DeadEvent?event)?{??
  10. ????????notDelivered?=? true ;??
  11. ????}??
  12. ???
  13. ???? public ? boolean ?isNotDelivered()?{??
  14. ???????? return ?notDelivered;??
  15. ????}??
  16. }??



下面是測(cè)試類:?

Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?shouldDetectEventWithoutListeners()? throws ?Exception?{??
  3. ???
  4. ???? //?given ??
  5. ????EventBus?eventBus?=? new ?EventBus( "test" );??
  6. ???
  7. ????DeadEventListener?deadEventListener?=? new ?DeadEventListener();??
  8. ????eventBus.register(deadEventListener);??
  9. ???
  10. ???? //?when ??
  11. ????eventBus.post( new ?OurTestEvent( 200 ));??
  12. ???
  13. ????assertThat(deadEventListener.isNotDelivered()).isTrue();??
  14. }??



如果沒(méi)有消息訂閱者監(jiān)聽(tīng)消息, EventBus將發(fā)送DeadEvent消息, 這時(shí)我們可以通過(guò)log的方式來(lái)記錄這種狀態(tài).?

2.Event的繼承 ?

如果Listener A監(jiān)聽(tīng)Event A, 而Event A有一個(gè)子類Event B, 此時(shí)Listener A將同時(shí)接收Event A和B消息?

看下面的例子:?

Java代碼?? 收藏代碼
  1. public ? class ?NumberListener?{??
  2. ???
  3. ???? private ?Number?lastMessage;??
  4. ???
  5. ???? @Subscribe ??
  6. ???? public ? void ?listen(Number?integer)?{??
  7. ????????lastMessage?=?integer;??
  8. ????}??
  9. ???
  10. ???? public ?Number?getLastMessage()?{??
  11. ???????? return ?lastMessage;??
  12. ????}??
  13. }??
  14. ??
  15. ??????
  16. public ? class ?IntegerListener?{??
  17. ???
  18. ???? private ?Integer?lastMessage;??
  19. ???
  20. ???? @Subscribe ??
  21. ???? public ? void ?listen(Integer?integer)?{??
  22. ????????lastMessage?=?integer;??
  23. ????}??
  24. ???
  25. ???? public ?Integer?getLastMessage()?{??
  26. ???????? return ?lastMessage;??
  27. ????}??
  28. }??



對(duì)應(yīng)的測(cè)試類:?


Java代碼?? 收藏代碼
  1. @Test ??
  2. public ? void ?shouldGetEventsFromSubclass()? throws ?Exception?{??
  3. ???
  4. ???? //?given ??
  5. ????EventBus?eventBus?=? new ?EventBus( "test" );??
  6. ????IntegerListener?integerListener?=? new ?IntegerListener();??
  7. ????NumberListener?numberListener?=? new ?NumberListener();??
  8. ????eventBus.register(integerListener);??
  9. ????eventBus.register(numberListener);??
  10. ???
  11. ???? //?when ??
  12. ????eventBus.post( new ?Integer( 100 ));??
  13. ???
  14. ???? //?then ??
  15. ????assertThat(integerListener.getLastMessage()).isEqualTo( 100 );??
  16. ????assertThat(numberListener.getLastMessage()).isEqualTo( 100 );??
  17. ???
  18. ???? //when ??
  19. ????eventBus.post( new ?Long(200L));??
  20. ???
  21. ???? //?then ??
  22. ???? //?this?one?should?has?the?old?value?as?it?listens?only?for?Integers ??
  23. ????assertThat(integerListener.getLastMessage()).isEqualTo( 100 );??
  24. ????assertThat(numberListener.getLastMessage()).isEqualTo(200L);??
  25. }??

?

Google Guava EventBus


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 三及毛片 | 亚洲一区二区在线视频 | 黑人精品欧美一区二区蜜桃 | 99精品久久 | 日韩免费在线视频 | 国产91网 | 欧美激情久久久久久久久 | 91精品国产综合久久久蜜臀粉嫩 | bb毛片 | 日韩精品高清在线 | 国产精品久久久久久久7电影 | 婷婷精品国产亚洲AV在线观看 | 毛片免费观看 | 亚洲精品第五页中文字幕 | 久久se精品一区精品二区 | se999se男人最爱 | 亚洲国产伦理 | 欧美精品成人a多人在线观看 | 成熟人妻AV无码专区A片 | 性欧美一级 | 性激情| 国产色婷婷精品综合在线观看 | 欧美专区在线播放 | 久久久久亚洲 | 久久久久久久国产 | 国产大毛片 | 欧美精品无需播放器在线观看 | 亚洲欧美日韩精品久久奇米色影视 | 欧美日韩一区二区在线视频 | 国产精品久久久久久亚洲伦理 | 97网站| 国产一区久久精品 | 欧美在线高清 | 久久亚洲国产精品日日av夜夜 | 亚洲欧洲日产国码在线观看 | writeas桌下口| 91精品国产免费久久 | 亚洲视频国产 | 日韩久久久久久 | 亚洲一区国产二区 | 日韩五月 |