關於java中的this::


今天在閱讀其他人的源碼的時候發現了這樣一句話 

Observable.zip(mLoginObservable, mBannerObservable, mArticleObservable, this::createResponseMap)

最后的一個this::createResponseMap是什么鬼,臣妾看不懂呀!!!!
然后發現createResponseMap是一個方法
    @NonNull
    private HashMap<String, Object> createResponseMap(BaseResponse<LoginData> loginResponse,
                                                      BaseResponse<List<BannerData>> bannerResponse,
                                                      BaseResponse<FeedArticleListData> feedArticleListResponse) {
        HashMap<String, Object> map = new HashMap<>(3);
        map.put(Constants.LOGIN_DATA, loginResponse);
        map.put(Constants.BANNER_DATA, bannerResponse);
        map.put(Constants.ARTICLE_DATA, feedArticleListResponse);
        return map;
    }

但是本寶寶還是看不懂啊。java中什么時候出了這樣的異端了?

后面經過百度,發現::是java8 中新引入的運算符

這個博客有說明

https://www.cnblogs.com/tietazhan/p/7486937.html?tdsourcetag=s_pctim_aiomsg

但是網上的博客還是教程說的都是Class::function。而不是我現在遇到的this::function。

但是后面經過我的思考,其實是一樣的。只不過Class::function的時候function是屬於Class的,應該是靜態方法。

而this::function的funtion是屬於這個對象的。

所以上面的代碼的等效方法是

addSubscribe(Observable.zip(mLoginObservable, mBannerObservable, mArticleObservable, new Function3<BaseResponse<LoginData>, BaseResponse<List<BannerData>>, BaseResponse<FeedArticleListData>, HashMap<String,Object>>() {
            @Override
            public HashMap<String, Object> apply(BaseResponse<LoginData> loginDataBaseResponse, BaseResponse<List<BannerData>> listBaseResponse, BaseResponse<FeedArticleListData> feedArticleListDataBaseResponse) throws Exception {
                return createResponseMap(loginDataBaseResponse,listBaseResponse,feedArticleListDataBaseResponse);
            }
        })

好噠,打完收工。簡而言之,就是一種語法糖而已,是一種簡寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM