我有一些静态初始化代码:
someMethodThatTakesAHashMap(new HashMap<K, V>() {
{
put("a","value-a");
put("c","value-c");}
});
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我收到了Eclipse的警告:serializable类没有声明静态的最终serialVersionUID.
这是抱怨匿名课吗?我能做些什么,或者我应该压制它.
我的理解是你不能在声明变量之前引用变量,并且在构造函数创建对象之前,所有代码(包括实例初始值设定项)都在类的主体内但在任何方法之外的顺序执行(例外是static变量和初始化程序块,它们在程序开始时按顺序运行,以初始化整个类).那么,为什么以下代码编译(并运行!):
public class WhyIsThisOk {
{ a = 5; } // why is this ok???
int a = 10;
public WhyIsThisOk() {
}
public static void main(String[] args) {
WhyIsThisOk why = new WhyIsThisOk();
System.out.println(why.a); // 10
}
}
Run Code Online (Sandbox Code Playgroud)