java8的Effectively final
参考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相关推荐
- java增加final,Java8增加功能--Effectively final 功能
java8新增了很多功能,可以大大简化代码,这个系列将会一一辅助代码加以介绍. 局部内部类和匿名内部类访问的局部变量必须由final修饰,java8开始,可以不加final修饰符,由系统默认添加.ja ...
- 1.20 Java8新特性:Effectively final
Java 中局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性.但从 Java 8 开始,我们可以不加 final 修饰符,由系统默认添加,当然这在 Jav ...
- Java8新特性:等同 final 效果(Effectively Final)
闭包 Effectively Final 示例 闭包 闭包就是能够读取函数作用域之外的变量的函数. 考虑一个返回复杂的 lambda 的高阶函数,使用了函数作用域之外的变量,返回该函数会发生什么? j ...
- java 8新特性之effectively final
我们平时使用内部类时,如果需要使用外部的变量,只能通过final关键字来修饰该变量,在java8中,有了新的处理方式,如下: 针对于jdk1.8,对于一个变量,如果没有给它加final修饰,而且没有对 ...
- java中的final关键字和effectively final
我们在给lamda传参数时,可能会出现如下情况: Variable used in lambda expression should be final or effectively final 一般情 ...
- 深入浅出理解 Variable used in lambda expression should be final or effectively final
翻译:lambda 表达式中使用的变量应该是 final 或者有效的 final 原因解析:lambda表达式(多用在线程领域),是由匿名内部类演变来的. 匿名内部类产生的对象一般存放在JVM的堆区域 ...
- 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 原因:在 ...
- Java8新特性解析
Java 8中的新特性有: 接口中默认方法,lambda 表达式,方法引用,重复注解,流.函数.接口.map扩展.日期中的新变化等,接下来一一介绍 1. Default Methods for Int ...
- Java8学习笔记(1) -- 从函数式接口说起
转载自 Java8学习笔记(1) -- 从函数式接口说起 希望本文能够成为Java8 Lambda表达式的快速入门指南. 函数式接口 理解Functional Interface(函数式接口,以下 ...
- 【java8新特性】——lambda表达式与函数式接口详解(一)
一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...
最新文章
- Android(安卓)一个简单的聊天界面的实现(eclipse实现)
- 一个不用SD卡,不用livesuit的刷nand的想法
- Git使用技巧(1)-- 配置【持续更新】
- thincmf 分页无法搜索_thinkcmf5 后台搜索分页保持分页条件
- 热胀冷缩,但为什么水结冰体积会膨胀?
- 用C++实现十进制转二进制【个人思想】
- 算法训练营 重编码_关于如何在没有训练营的情况下学习编码的10条提示
- SaltStack 部署案例 02
- 计算机软件国民经济行业代码,国民经济行业类别及代码.DOC
- mac上iphone4刷机与越狱(二)
- 阿里云服务器需要备案吗?
- 【Oracle】IF EXISTS用法
- WSO2 ESB 5.0.0 配置消息存储
- 线性代数笔记26——傅立叶级数
- 全国高中数学联赛——代数
- 向左还是向右?聊聊中台建设中的那些纠结事
- 面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型
- BI商业智能项目中存在的风险与企业如何推行适合自己的BI项目
- libjpeg-turbo使用教程
- 欧姆龙模拟量模块ad041_CJ1W-AD041-V1 欧姆龙模拟量输入单元 CJ1W-AD041-V1 - 广州凌控...
热门文章
- 关于阿里云的一键部署工具【飞流】的使用(详细)
- [授权发表]程序执行的那一刹那
- STM32控制步进电机运三种方式控制源码详解:主从定时器+编码器闭环+GPIO模拟(基于【TB6600】【DRV8825】驱动器)
- android源码定制之初探--定制android关机界面
- 远程监控养猪监控系统
- java print快捷键_请问eclipse中输出的快捷键是什么?
- ext4文件系统错误处理机制
- 刮刮乐微信html5源码,微信小程序canvas实现刮刮乐效果
- js for in对象key排序
- Eli Lilly(礼来) | RPA在医疗行业的应用案例