小编Ste*_*n T的帖子

Java"空白的最终字段可能尚未初始化"Anonymous Interface vs Lambda Expression

我最近遇到了错误消息"空白的最终字段obj可能尚未初始化".

通常情况下,如果您尝试引用可能尚未分配给值的字段.示例类:

public class Foo {
    private final Object obj;
    public Foo() {
        obj.toString(); // error           (1)
        obj = new Object();
        obj.toString(); // just fine       (2)
    }
}
Run Code Online (Sandbox Code Playgroud)

我用Eclipse.在行中(1)我得到错误,在行中(2)一切正常.到目前为止这是有道理的.

接下来,我尝试obj在构造函数内创建的匿名接口中访问.

public class Foo {
    private Object obj;
    public Foo() {
        Runnable run = new Runnable() {
            public void run() {
                obj.toString(); // works fine
            }
        };
        obj = new Object();
        obj.toString(); // works too
    }
}
Run Code Online (Sandbox Code Playgroud)

这也有效,因为我obj在创建界面时无法访问.我也可以将我的实例传递给其他地方,然后初始化对象obj然后运行我的界面.(但null在使用之前检查是否合适). …

java compiler-construction lambda constructor java-8

20
推荐指数
2
解决办法
9687
查看次数