IntelliJ不够智能,让我感到困惑,或者我更有可能在Java(或OOP的概念)中忽略变量范围。我有这段代码:
public class SomeClass {
private String foo = "something";
public void someMethod() {
new Thread(() -> {
String bar = foo; // How can foo be accessed from here?
someOtherMethod(); // Even for this IntelliJ shows no error.
}).start();
}
public void someOtherMethod() {
// ...
}
}
我认为它很好地说明了我想要实现的目标:我想在Thread中使用SomeClass的foo属性。所以我刚刚开始编写这样的程序,然后我意识到它不正确(或者是它?)然后我很惊讶编辑器没有抱怨foo和someOtherMethod为他们无法从Thread的Runnable内部访问。
也许只是我不完全理解OOP。这段代码是否真的正确,只是foo通过值传递给匿名函数和someOtherMethod引用?
答案 0 :(得分:3)
你在做什么绝对没问题。匿名类可以访问封闭类的成员。另一方面,局部变量必须先声明为final才能在匿名类中使用。