gpt4 book ai didi

java - 为什么我在从内部类调用特定于对象的方法/字段时没有抛出任何错误?

转载 作者:行者123 更新时间:2023-11-30 08:39:50 25 4
gpt4 key购买 nike

我在我的一个 Java 类中使用类似于以下代码的内容:

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 传递给内部类),它完全没问题。我不确定为什么这没有给我一个错误,并且进一步困惑它调用什么实例。

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

最佳答案

called被分配了一个匿名子类的实例 InnerClass .因为它是一个实例成员,它在 SomeClass 的实例时被初始化。已创建。

因为它是在 SomeClass 的正文中声明的, 它是 SomeClass 的内部类并有权访问 SomeClass 的实例方法和成员. incrementValue()将在 SomeClass 的实例上执行为此 called成员已初始化。

如果将匿名类替换为等效的常规内部类,也许会更容易理解:

public class SomeClass {

....

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

public final InnerClass called = new SubInnerClass(this);

....
}

关于java - 为什么我在从内部类调用特定于对象的方法/字段时没有抛出任何错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com