1

このコードに問題があります:

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();
    }
});

このコードを変換して、次のようなラムダ式を使用したいと考えています。

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は内部クラスを参照していないため、機能しません。

4

2 に答える 2

0

Java仕様に従って、

ラムダ本体でによって示される値は、周囲のコンテキストでthisによって示される値と同じです。this

そのthisため、匿名オブジェクトを参照するために使用する必要がある場合は、ラムダではなく、明示的な匿名オブジェクトを使用する必要があります。回避策は、元のコードのように書くことです。

Lambda は多くの状況で役立つツールですが、すべての状況で使用する必要はありません。

于 2015-09-26T01:44:43.640 に答える