class Test {
  void foo() {
    new Runnable() {
      public void run() {
          Inner inner = new Inner().invoke();
          if (inner.is()) return;
          String var = inner.getVar();
          System.out.println(var);
      }
    };
  }

    private class Inner {
        private boolean myResult;
        private String var;

        boolean is() {
            return myResult;
        }

        public String getVar() {
            return var;
        }

        public Inner invoke() {
            var = null;
            if (var == null) {
                myResult = true;
                return this;
            }
            myResult = false;
            return this;
        }
    }
}