【发布时间】:2019-05-02 09:39:38
【问题描述】:
为什么当我在变量声明中使用引用this 时,不会出现非法前向引用?声明this和不声明有什么区别?
以下示例由于非法前向引用而无法编译:
class FailsToCompile {
int a = b; //illegal forward reference
int b = 10;
}
通过this 限定对b 的使用,编译错误消失了。
class Compiles {
int a = this.b; //that's ok
int b = 10;
}
【问题讨论】:
-
@Pshemo 我认为它背后的机制是一样的,不是吗?所以这应该算作重复
-
@Lino 你可能是对的,但由于我还没有读过那篇文章,所以我不想仅仅根据概率使用我的欺骗锤。
-
欢迎来到 Stack Overflow!请阅读“如何创建minimal reproducible example”。然后使用edit 链接改进您的问题(不要通过 cmets 添加更多信息)。否则我们无法回答您的问题并为您提供帮助。含义:范围在这里非常重要,你的代码sn-ps完全忽略了范围!
-
我建议(基于没有确凿的证据)禁止前向引用只是一种尽力而为的尝试"to catch, at compile time, circular or otherwise malformed initializations"。例如,您还可以通过方法调用前向引用变量。因此,它会捕获明显错误的代码,但如果您真的要坚持自己知道自己在做什么,它不会太努力地阻止您。
标签: java