void (final Outer outer) { // Of course there's an exception to "can't access instance method, even if it wanted to." new Runnable() { @Override public void run() { // Invalid warning, because inner class has to go trough the passed-in named parameter. // There's no name shadowing issue in this case, because of forced object access. String <warning descr="Local variable 'field' hides field in class 'Outer'">field</warning> = "hello"; System.out.println(field); System.out.println(outer.field); } }.run(); }