注意java8中已经没有匿名内部类和局部内部类只能访问final变量的限制了!

今天写Android代码编译器报错Variable ‘arrayAdapter‘ is accessed from within inner class, needs to be declared final。

于是打算找几篇博客学习学习,结果不管我怎么弄,在java编译器上就是不报错啊!

转念一想,是不是我用JDK1.8的原因,百度一下,知乎证实了我的猜想。

具体见:http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html#accessing-members-of-an-enclosing-class

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 16:21:02

注意java8中已经没有匿名内部类和局部内部类只能访问final变量的限制了!的相关文章

Java知多少(37)静态内部类、匿名内部类、成员式内部类和局部内部类

内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法内部或代码块内部)的类就是成员式内部类,它可以直接使用外部类的所有变量和方法,即使是 private 的.外部类要想访问内部类的成员变量和方法,则需要通过内部类的对象来获取. 请看下面的代码: 1 public class Outer{ 2 private int size; 3 public cl

JavaSE7基础 类中 静态方法只能访问静态变量

版本参数:jdk-7u72-windows-i586注意事项:博文内容仅供参考,不可用于其他用途. 代码 class Test{ public static int num1 = 1; private static int num2 = 2; //静态方法只能访问静态变量 public static void sayHello(){ System.out.println(num1); System.out.println(num2); } } class Demo{ public static

Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量

先看下面这段代码: public class Test { public static void main(String[] args) { } public void test(final int b) { final int a = 10; new Thread(){ public void run() { System.out.println(a); System.out.println(b); }; }.start(); } } 这段代码会被编译成两个class文件:Test.class

Android(java)学习笔记150:为什么局部内部类只能访问外部类中的 final型的常量

为什么匿名内部类参数必须为final类型: 1)  从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的,是很自然的. 2) 为什么JAVA中要加上一条限制:只能访问final型的局部变量? JAVA语言的编译程序的设计者当然全实现:局部内部类能访问方法中的所有的局部变量(因为:从理论上这是很自然的要求),但是:编译技术是无法实现的或代价极高. 至于为什么只能是fi

JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final

今天看书的时候看到了局部内部类,书上说局部内部类可以访问局部变量,但是必须是final的.因为局部变量在方法调用之后就消失了,使用final声明的话该局部变量会存入堆中,和内部类有一样的声明周期.但是我写了一个局部内部类,竟然可以访问非final的局部变量,请问这是什么回事呢.ps:我的jdk是8 难道和这个有关系? public class jubuneibulei { public void p(int a, int b){ class te{ void print(){ System.ou

Java8中新增的日期和时间API

1.计算时间间隔 Java8之前,我们想要确定一个方法的运行时间长度,可以这样: long start = System.currentTimeMillis(); doSomething(); long end = System.currentTimeMillis(); System.out.println(end-start); Java8中,可以这样 Instant start = Instant.now(); doSomething(); Instant end = Instant.now

C++ 中的嵌套类和局部类

C++ 中的嵌套类和局部类 最近趁着春节假期空闲,找了本C++ Primer 学了几章,发现C++ 中的许多特性自己都不知道.其中嵌套类和局部类感觉还是蛮有用的,简单的写写他们的用法. 嵌套类 所谓嵌套类就是可以在一个类中定义另一个类.这个被嵌套的类的作用域就只在它的上一级类中.下面是个例子: #include <iostream> using namespace std; class c1 { public: int a; void foo(); class c2 { public: int

Java8中聚合操作collect、reduce方法详解

Stream的基本概念 Stream和集合的区别: Stream不会自己存储元素.元素储存在底层集合或者根据需要产生.Stream操作符不会改变源对象.相反,它会返回一个持有结果的新的Stream.3.Stream操作可能是延迟执行的,这意味着它们会等到需要结果的时候才执行.Stream操作的基本过程,可以归结为3个部分: 创建一个Stream.在一个或者多个操作中,将指定的Stream转换为另一个Stream的中间操作.通过终止(terminal)方法来产生一个结果.该操作会强制它之前的延时操

java8中CAS的增强

注:ifeve.com的同名文章为本人所发,此文在其基础做了些调整.转载请注明出处! 一.java8中CAS的增强 前些天,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因查找,有了如下发现: 在jdk1.7中,AtomicInteger的getAndIncrement是这样的: public final int getAndIncrement() {