我下载了社区版,版本是13.1.2。
当我使用name初始化innerName时,我的以下代码段出现Variable 'name' might not have been initialized
错误。但是,它可以运行。
public class Foo {
private final String name;
class Inner {
private String innerName = "inner" + name;
}
public Foo(String name) {
this.name = name;
}
public static void main(String[] args) {}
}
答案 0 :(得分:2)
我不会说这是一个错误(可能是IntelliJ过于热心的情况,尽管我认为这不是一件坏事)。从技术上讲,您可以在分配Inner
之前尝试在构造函数中创建name
的实例。我建议你不要这样做,只需将name
传递给构造函数。
答案 1 :(得分:1)
我认为可能是一个错误。 javac
1.8.0_05和Eclipse 4.4M7不抱怨。
此外,常规嵌套类必须具有封闭实例,这意味着如果Inner
的实例已经存在,则您不能拥有Foo
的实例,这意味着name
必须具有已初始化。
虽然我可能是错的,但我没有看到任何明显可能表明代码不正确的内容。
编辑:@Cubic提出了一个有趣的观点。现在我不太确定正确的行为是什么。
答案 2 :(得分:0)
是的,因为javac
成功编译了类,并且它应该是可编译的,因为在name
的每个构造函数中初始化Foo
。您应该向JetBrains' YouTrack