Java的foreach中,变量加final的作用(for(final XXX xxx : xxxs))
2019独角兽企业重金招聘Python工程师标准>>>
在阅读apache的commons-io过程中,阅读到下段的代码。
final List<Comparator<File>> list = new ArrayList<Comparator<File>>();for (final Comparator<File> comparator : delegates) {list.add(comparator);}this.delegates = (Comparator<File>[]) list.toArray(new Comparator<?>[list.size()]);
其中感到奇怪的是comparator前加final。
从《Thinking in Java》4th中得知,final不外乎主要有以下3个作用:
1.final放在class前,拒绝该类被继承;
2.final放在类的方法名前,拒绝子类重写该方法;
3.final放在域或变量前,一旦域或变量赋值或引用对象,就再也不能重新赋值或引用其他对象。
经测试,comparator前加final情景是用到final作用3,以下为测试代码:
public class FinalParam {public static void main(String[] args){List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);new FinalParam().testFinal(list);}public void testFinal(List<Integer> list){for(final Integer i : list){System.out.println(i++);//(1)防止迭代时 修改}}public void testFinal2(final List<Integer> list){list = new ArrayList<>();(2)//防止参数重新应用}
}
上面代码是不能编译通过的,(1)(2)处IDE都提示错误:The final local variable (1)i/(2)list cannot be assigned. It must be blank and not using a compound assignment(这final修饰的本地变量不可以被赋值,它必须空掉或不要使用复合赋值(+=,-=...))。
感到奇怪的原因是,按照作用3的思路下,for在第一次迭代赋值,第二次迭代理应不能赋值的。
综上所述,在Java中,可以将for(final XXX xxx : xxxs)理解为有xxxs.size个的同名特殊方法,xxx为参数,一经赋值,就不能再变。
转载于:https://my.oschina.net/jallenkwong/blog/749244
Java的foreach中,变量加final的作用(for(final XXX xxx : xxxs))相关推荐
- c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...
- bpl文件java,在LoadLibrary中动态加载BPL失败
我想在Delphi 10 Seattle(Update 1)或Delphi 10.1 Berlin项目(Enterprise版本)中动态加载BPL模块 . 但LoadPackage函数失败并显示消息( ...
- java equals getclass_java中instanceof和getClass()的作用
初学者难免有点混淆java中instanceof和getClass()的作用, 下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { } ...
- java Object类中的各个方法及其作用
原文链接 一.简介Object类 Object类是所有类的父类,即每个类都直接或简介继承自该类.所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组. 在不明确给出父类的情况下,Jav ...
- JAVA 类声明中关键字public的作用
JAVA类声明中关键字public起到什么作用呢?如下Hello类的声明,按着字面的意思理解是:Hello类是公共的,要求Hello类与 类文件名必须保持一致,并且一个java文件中只能有一个publ ...
- 为什么一些人喜欢在java代码中能加final的变量都加上final
我记得第一次看到这种写法是在看慕课网的课程,毕竟是小白,我记得当时我对于android并不是感觉很清晰,虽然现在也好不了多少.那时候我已经读过了闫博士的<java与模式>一书,如果人名记错 ...
- Java forEach中 Lambda Expr中的 final变量要求
https://my.oschina.net/wadelau/blog/1859419 Java forEach中 Lambda Expr中的 final变量要求 Java8闭包 闭包是一个函数在创建 ...
- java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘
java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code ...
- Java接口中的成员变量为什么必须是public static final?
在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...
最新文章
- Linux 中多终端同步 history 记录
- pr预设的卷及内核锐化是什么_看完这一篇,彻底搞懂锐化怎么用!
- Day6: Linux基础片:文件压缩、Vim用法
- 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法
- 软件工程专业学生如何在研二期间通过六级——我的六级之路
- java 银行项目对于金额的面试题_2019年面试题小结
- 给定一个由n个数字组成的数组,请检查是否存在重复项
- mysql in union all_MySQL中使用or、in与union all在查询命令下的效率对比_MySQL
- CDH 5.15.2 离线安装
- ubuntu server 10.4下LAMP的安装
- (centos6.5)MySQL服务安装
- JAVA 线程池的分析和使用
- 实用工具系列 - Xshell安装下载与使用
- 利用python对股票商誉进行排名分析,防止踩雷
- uniapp中简单方法之上传图片到腾讯云
- 乔纳森-弗莱彻:被遗忘的搜索引擎之父
- react-redux中Connect方法
- 数据防泄露解决方案-智能制造
- 企业邮箱怎么注册流程?企业邮箱域名怎么注册?
- matlab里qmul,哈工大四系导航原理 大作业 INS部分
热门文章
- 硬件加速 | 常用电路设计之PRBS伪随机码发生器的设计
- python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵怎么办
- python不显示边框_python设置表格边框的具体方法
- springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql)
- LinkedHashMap与HashMap 关系
- (附源码)php柘城县农产品销售网站 毕业设计 020832
- 郭长波连任OpenStack基金会独立董事 继续推动中国力量话语权
- 英维克,上市只是一个新的起点
- 蓝桥杯 ALGO-7 逆序对
- 微信公众号开发——基础认识