这是一个Intellij Idea错误吗?

时间:2014-05-24 07:50:01

标签: java intellij-idea inner-classes

我下载了社区版,版本是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) {}
}

3 个答案:

答案 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

提交错误