首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Retrolambda中使用“this”关键字

在Retrolambda中使用“this”关键字
EN

Stack Overflow用户
提问于 2015-09-26 00:38:23
回答 2查看 139关注 0票数 1

我对这个代码有一个问题:

代码语言:javascript
复制
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            //noinspection deprecation
            view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
        getDefaultIntent();
    }
});

我希望将此代码转换为使用如下所示的lambda表达式:

代码语言:javascript
复制
view.getViewTreeObserver().addOnGlobalLayoutListener(()->{
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    } else {
        //noinspection deprecation
        view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    }
    getDefaultIntent();
});

但是它不起作用,因为现在this不引用内部类。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-26 01:44:43

根据Java规范

this在lambda主体中表示的值与this在周围上下文中表示的值相同。

因此,如果需要使用this来引用匿名对象,则需要使用显式匿名对象,而不是lambda。所做的工作是像编写原始代码一样编写它。

Lambda是一个在很多情况下都很有用的工具,但不需要在所有情况下都使用。

票数 0
EN

Stack Overflow用户

发布于 2015-09-26 01:05:56

试着通知参数,这个的“完整地址”。

代码语言:javascript
复制
removeGlobalOnLayoutListener(this);

就像这样:

代码语言:javascript
复制
removeGlobalOnLayoutListener(MainActivity.this);

当然,你需要通知你的真名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32792446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档