为什么我从内部 类 调用对象特定 methods/fields 时没有抛出任何错误?

Why am I throwing no errors for calling object-specific methods/fields from inner classes?

我在我的 Java classes:

中使用了类似于以下代码的东西
public class SomeClass {
    private int someValue;

    void incrementValue() {
        someValue++;
    }

    public abstract static class InnerClass {
        private final SomeClass toRunOn;

        public InnerClass(SomeClass obj) {
            toRunOn = obj;
        }

        public abstract void execute();

        // To allow us to call this on a given instance
        final SomeClass getObj() {
            return toRunOn;
        }
    }

    public final InnerClass called = new InnerClass(this) {
        public final void execute() {
            incrementValue(); // This is what I thought should be throwing an error
        }
    };
}

但是,虽然我希望这会在定义 execute()called 字段中引发编译器错误,因为我没有给 incrementValue() 一个要处理的对象(这就是为什么我允许将 this 传递给内部 class),这完全没问题。我不确定为什么这没有给我一个错误,并且进一步混淆了它 调用的实例。

我是不是误解了这里调用的某种形式的引用,还是发生了更微妙的事情?

called 被分配了 InnerClass 的匿名子 class 的实例。由于它是实例成员,因此在创建 SomeClass 的实例时对其进行初始化。

由于在SomeClass的主体中声明,它是SomeClass的内部class,可以访问SomeClass的实例方法和成员。 incrementValue() 将在初始化 called 成员的 SomeClass 实例上执行。

如果将匿名 class 替换为等效的常规内部 class :

可能会更容易理解
public class SomeClass {

    ....

    class SubInnerClass extends InnerClass {
        public final void execute() {
            incrementValue();
        }
    }

    public final InnerClass called = new SubInnerClass(this);

    ....
}