class WithBlankFinal {
private final Integer i;
// Without this constructor, I got a compile-
// time error about initialization:
public WithBlankFinal(int ii) {
i = new Integer(ii);
}
public Integer geti() {
// This wouldn't compile:
if(i == null)
i = new Integer(47);
return i;
}
}
public class A {
public static void main(String args[]) {
WithBlankFinal wbf = new WithBlankFinal(10);
System.out.println(wbf.geti());
}
}
这是thinking in Java中关于空白final 的一个习题,书上说必须在使用前初始化.我认为
public Integer geti() {
// This wouldn't compile:
if(i == null)
i = new Integer(47);
return i;
}
这几行代码也保证了使用前初始化了啊,我认为这个"使用"应该指的是这里System.out.println(wbf.geti());
所以应该满足语法要求.
但编译不能通过.
请各位帮帮忙!提前道谢了 !!
------解决方案--------------------
在创建对象之前要初始化.你的例子中必须调用方法的时候才能初始化.
类中的final变量可以直接初始化,在构造方法中初始化,或者在初始化块中初始化.