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))相关推荐

  1. c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  2. bpl文件java,在LoadLibrary中动态加载BPL失败

    我想在Delphi 10 Seattle(Update 1)或Delphi 10.1 Berlin项目(Enterprise版本)中动态加载BPL模块 . 但LoadPackage函数失败并显示消息( ...

  3. java equals getclass_java中instanceof和getClass()的作用

    初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解. 父类A: class A { }    子类B: class B extends A { }    ...

  4. java Object类中的各个方法及其作用

    原文链接 一.简介Object类 Object类是所有类的父类,即每个类都直接或简介继承自该类.所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组. 在不明确给出父类的情况下,Jav ...

  5. JAVA 类声明中关键字public的作用

    JAVA类声明中关键字public起到什么作用呢?如下Hello类的声明,按着字面的意思理解是:Hello类是公共的,要求Hello类与 类文件名必须保持一致,并且一个java文件中只能有一个publ ...

  6. 为什么一些人喜欢在java代码中能加final的变量都加上final

    我记得第一次看到这种写法是在看慕课网的课程,毕竟是小白,我记得当时我对于android并不是感觉很清晰,虽然现在也好不了多少.那时候我已经读过了闫博士的<java与模式>一书,如果人名记错 ...

  7. Java forEach中 Lambda Expr中的 final变量要求

    https://my.oschina.net/wadelau/blog/1859419 Java forEach中 Lambda Expr中的 final变量要求 Java8闭包 闭包是一个函数在创建 ...

  8. java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘

    java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code ...

  9. Java接口中的成员变量为什么必须是public static final?

    在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...

最新文章

  1. Linux 中多终端同步 history 记录
  2. pr预设的卷及内核锐化是什么_看完这一篇,彻底搞懂锐化怎么用!
  3. Day6: Linux基础片:文件压缩、Vim用法
  4. 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法
  5. 软件工程专业学生如何在研二期间通过六级——我的六级之路
  6. java 银行项目对于金额的面试题_2019年面试题小结
  7. 给定一个由n个数字组成的数组,请检查是否存在重复项
  8. mysql in union all_MySQL中使用or、in与union all在查询命令下的效率对比_MySQL
  9. CDH 5.15.2 离线安装
  10. ubuntu server 10.4下LAMP的安装
  11. (centos6.5)MySQL服务安装
  12. JAVA 线程池的分析和使用
  13. 实用工具系列 - Xshell安装下载与使用
  14. 利用python对股票商誉进行排名分析,防止踩雷
  15. uniapp中简单方法之上传图片到腾讯云
  16. 乔纳森-弗莱彻:被遗忘的搜索引擎之父
  17. react-redux中Connect方法
  18. 数据防泄露解决方案-智能制造
  19. 企业邮箱怎么注册流程?企业邮箱域名怎么注册?
  20. matlab里qmul,哈工大四系导航原理 大作业 INS部分

热门文章

  1. 硬件加速 | 常用电路设计之PRBS伪随机码发生器的设计
  2. python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵怎么办
  3. python不显示边框_python设置表格边框的具体方法
  4. springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql)
  5. LinkedHashMap与HashMap 关系
  6. (附源码)php柘城县农产品销售网站 毕业设计 020832
  7. 郭长波连任OpenStack基金会独立董事 继续推动中国力量话语权
  8. 英维克,上市只是一个新的起点
  9. 蓝桥杯 ALGO-7 逆序对
  10. 微信公众号开发——基础认识