android - Using 'this' keyword with Retrolambda -


i have problem code:

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

i want convert code use lambda expression this:

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

but wont work because this doesn't refer inner class.

per java specifications,

the value denoted this in lambda body same value denoted this in surrounding context.

as such, if need use this refer anonymous object, need use explicit anonymous object, not lambda. work around writing original code.

lambda's tool useful in lots of situations, not need used in all situations.


Comments