欧美三区_成人在线免费观看视频_欧美极品少妇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)論
主站蜘蛛池模板: 国产a区 | 嫩草国产 | 日日麻批的全部过程 | 不卡久久 | 国产区视频在线观看 | 浮力影院最新地址 | 国内精品伊人久久久影视 | 亚洲乱码AV久久久久久久 | 日韩a无吗一区二区三区 | 女生羞羞网站 | 色亚洲色图 | 天干夜天天夜天干天 | 中文字幕av免费 | 国内自拍视频在线看免费观看 | 国产精选一区二区 | 国产免费播放一区二区 | 精品久久一区二区三区 | 欧美一级毛片在线看视频 | 26uuu在线观看 | 国产激情一级毛片久久久 | 精品九九 | 日韩有码在线播放 | 日韩精品一区二区三区视频播放 | 欧美一区视频 | 久久综合九色综合欧美狠狠 | 日本不卡视频在线观看 | 好吊色欧美一区二区三区四区 | 在线激情视频 | 咪咪色在线视频 | 天天操婷婷 | 亚洲精品一区二区三区蜜桃久 | 精品日韩欧美一区二区三区在线播放 | 日韩在线看片 | 国产亚洲精品久久久久久久网站 | 中文天堂网| 欧美vide| 91亚瑟视频 | 香港全黄一级毛片在线播放 | 人人干在线 | av黄色在线 | 久久亚洲一区二区 |