我有一个以size作为参数的构造函数。Eclipse迫使我声明Integer size为final。为什么?
public LRUCache(final Integer size) {
lhm = Collections.synchronizedMap(new LinkedHashMap<String, Integer>() {
@Override
public boolean removeEldestEntry(Map.Entry eldest) {
return size() > size;
}
});
}发布于 2013-10-12 03:35:00
size是对Integer对象的引用。当你做的时候
size() > size您正在取消引用size以获取其int值。因为removeEldestEntry发生在不同的上下文中,在不同的时间,需要有一些保证您所使用的引用与声明的引用相同。因此你需要final .所以引用不能改变。
在Java语言规范中
在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为“最终”。
和
每个局部变量(§14.4)和每个空白最后字段(§4.12.4,§8.3.1.2)在任何访问其值时都必须有一个明确的赋值值。
和
在V范围内声明的匿名类声明(第15.9.5节)之前,绝对会在声明匿名类的类实例创建表达式之后分配V。
发布于 2013-10-12 03:34:06
月食并没有强迫任何东西。如果局部变量用于匿名内部类,则要求将它们声明为最终变量。这些类生成使用的任何局部变量的副本,如果变量不是最终变量,则原始变量和副本可能引用不同的值。
https://stackoverflow.com/questions/19330197
复制相似问题