参考java官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html#accessing-members-of-an-enclosing-class

在以前的java版本中匿名内部类的参数必须是final的,原因在于保证内部和外部类的数据一致性。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。然而java8中不加final,也可以通过编译,在以前的版本中是不允许的。

以下例子(编译通过):

public interface Destination {int readLabel();
}
public class Parcel9 {static int test = 5; public static void main(String[] args) {Parcel9 p = new Parcel9();Destination d = p.destination(test);d.readLabel();}public Destination destination(int dest) {return new Destination() {private int label = dest;@Overridepublic int readLabel() {System.out.println(label);return label;}};}
}

解释:

以下例子(编译通不过):

java8的Effectively final相关推荐

  1. java增加final,Java8增加功能--Effectively final 功能

    java8新增了很多功能,可以大大简化代码,这个系列将会一一辅助代码加以介绍. 局部内部类和匿名内部类访问的局部变量必须由final修饰,java8开始,可以不加final修饰符,由系统默认添加.ja ...

  2. 1.20 Java8新特性:Effectively final

    Java 中局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性.但从 Java 8 开始,我们可以不加 final 修饰符,由系统默认添加,当然这在 Jav ...

  3. Java8新特性:等同 final 效果(Effectively Final)

    闭包 Effectively Final 示例 闭包 闭包就是能够读取函数作用域之外的变量的函数. 考虑一个返回复杂的 lambda 的高阶函数,使用了函数作用域之外的变量,返回该函数会发生什么? j ...

  4. java 8新特性之effectively final

    我们平时使用内部类时,如果需要使用外部的变量,只能通过final关键字来修饰该变量,在java8中,有了新的处理方式,如下: 针对于jdk1.8,对于一个变量,如果没有给它加final修饰,而且没有对 ...

  5. java中的final关键字和effectively final

    我们在给lamda传参数时,可能会出现如下情况: Variable used in lambda expression should be final or effectively final 一般情 ...

  6. 深入浅出理解 Variable used in lambda expression should be final or effectively final

    翻译:lambda 表达式中使用的变量应该是 final 或者有效的 final 原因解析:lambda表达式(多用在线程领域),是由匿名内部类演变来的. 匿名内部类产生的对象一般存放在JVM的堆区域 ...

  7. foreach无法给外部变量赋值(Local variable decimal defined in an enclosing scope must be final or effectively )

    报错信息如下: Local variable decimal defined in an enclosing scope must be final or effectively final 原因:在 ...

  8. Java8新特性解析

    Java 8中的新特性有: 接口中默认方法,lambda 表达式,方法引用,重复注解,流.函数.接口.map扩展.日期中的新变化等,接下来一一介绍 1. Default Methods for Int ...

  9. Java8学习笔记(1) -- 从函数式接口说起

    转载自   Java8学习笔记(1) -- 从函数式接口说起 希望本文能够成为Java8 Lambda表达式的快速入门指南. 函数式接口 理解Functional Interface(函数式接口,以下 ...

  10. 【java8新特性】——lambda表达式与函数式接口详解(一)

    一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...

最新文章

  1. Android(安卓)一个简单的聊天界面的实现(eclipse实现)
  2. 一个不用SD卡,不用livesuit的刷nand的想法
  3. Git使用技巧(1)-- 配置【持续更新】
  4. thincmf 分页无法搜索_thinkcmf5 后台搜索分页保持分页条件
  5. 热胀冷缩,但为什么水结冰体积会膨胀?
  6. 用C++实现十进制转二进制【个人思想】
  7. 算法训练营 重编码_关于如何在没有训练营的情况下学习编码的10条提示
  8. SaltStack 部署案例 02
  9. 计算机软件国民经济行业代码,国民经济行业类别及代码.DOC
  10. mac上iphone4刷机与越狱(二)
  11. 阿里云服务器需要备案吗?
  12. 【Oracle】IF EXISTS用法
  13. WSO2 ESB 5.0.0 配置消息存储
  14. 线性代数笔记26——傅立叶级数
  15. 全国高中数学联赛——代数
  16. 向左还是向右?聊聊中台建设中的那些纠结事
  17. 面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型
  18. BI商业智能项目中存在的风险与企业如何推行适合自己的BI项目
  19. libjpeg-turbo使用教程
  20. 欧姆龙模拟量模块ad041_CJ1W-AD041-V1 欧姆龙模拟量输入单元 CJ1W-AD041-V1 - 广州凌控...

热门文章

  1. 关于阿里云的一键部署工具【飞流】的使用(详细)
  2. [授权发表]程序执行的那一刹那
  3. STM32控制步进电机运三种方式控制源码详解:主从定时器+编码器闭环+GPIO模拟(基于【TB6600】【DRV8825】驱动器)
  4. android源码定制之初探--定制android关机界面
  5. 远程监控养猪监控系统
  6. java print快捷键_请问eclipse中输出的快捷键是什么?
  7. ext4文件系统错误处理机制
  8. 刮刮乐微信html5源码,微信小程序canvas实现刮刮乐效果
  9. js for in对象key排序
  10. Eli Lilly(礼来) | RPA在医疗行业的应用案例