关于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);
            }
        })

好哒,打完收工。简而言之,就是一种语法糖而已,是一种简写

posted @ 2018-08-21 11:13  蓝冷然  阅读(29085)  评论(1编辑  收藏  举报