首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么eclipse强迫我使用期末考试?

为什么eclipse强迫我使用期末考试?
EN

Stack Overflow用户
提问于 2013-10-12 03:32:28
回答 2查看 429关注 0票数 0

我有一个以size作为参数的构造函数。Eclipse迫使我声明Integer size为final。为什么?

代码语言:javascript
复制
   public LRUCache(final Integer size) {
        lhm = Collections.synchronizedMap(new LinkedHashMap<String, Integer>() {
            @Override
            public boolean removeEldestEntry(Map.Entry eldest) {
                return size() > size;
            }
        });
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-12 03:35:00

size是对Integer对象的引用。当你做的时候

代码语言:javascript
复制
size() > size

您正在取消引用size以获取其int值。因为removeEldestEntry发生在不同的上下文中,在不同的时间,需要有一些保证您所使用的引用与声明的引用相同。因此你需要final .所以引用不能改变。

Java语言规范

在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为“最终”。

每个局部变量(§14.4)和每个空白最后字段(§4.12.4,§8.3.1.2)在任何访问其值时都必须有一个明确的赋值值。

在V范围内声明的匿名类声明(第15.9.5节)之前,绝对会在声明匿名类的类实例创建表达式之后分配V。

票数 1
EN

Stack Overflow用户

发布于 2013-10-12 03:34:06

月食并没有强迫任何东西。如果局部变量用于匿名内部类,则要求将它们声明为最终变量。这些类生成使用的任何局部变量的副本,如果变量不是最终变量,则原始变量和副本可能引用不同的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19330197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档