Sure the problem could be fixed in a number of ways, it's just not as straightforwards as adding a qualifier. I can also think up several ways to fix this locally (modifying just single line):
((Runnable)() -> yield(1)).run(); or switch(0) { default -> yield(1); } or even for(int i=0; i<1; yield(1), i++) {} With best regards, Tagir Valeev On Sun, May 26, 2019 at 3:22 AM John Rose <john.r.r...@oracle.com> wrote: > > This one is fixable with a local-variable rename. > I think that's a robust solution as long as the > anonymous class is in a context where the > local can be introduced nearby. > > We can perhaps find awkward contexts where > the local cannot be introduced. I'm thinking > of 'super(new Object() {…})' and field initializers. > In those cases, the outer object can supply > a field or method to provide access to the > shadowed 'this'. > > On May 24, 2019, at 11:15 PM, Tagir Valeev <amae...@gmail.com> wrote: > > > > > > var x = new Runnable() { > > public void run() { > + var this1 = this; > > new Object() { > > void foo() { > + this1. > > yield(1); // this.yield(1) or Runnable.this.yield(1) are incorrect. > > } > > }.foo(); > > } > > void yield(int x) { System.out.println(x); } > > }; >