我最近遇到了错误消息"空白的最终字段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在使用之前检查是否合适). …