概述
一、匿名内部类引入外部变量必须是final?
主要原因是Java语言不支持闭包,所以如果不采用final类型的数据,很可能出现一种情况,就是方法执行完以后,局部变量就被消除了,但是匿名内部类的实例还可能存在,这个时候如果在去寻找变量,就会出现问题。所以,为了解决这个问题, 匿名内部类只能使用final的外部变量,因为final变量会在编译期间直接替换为值,所以即使外部变量已经不存在了,也不影响匿名内部类实例的正常运行。从下面这个例子可以更好的理解这一点:
public interface TestInterface {
public void say();
}
public class Test {
public static void main(String[] args) {
new Test().getTest().say();
}
public TestInterface getTest(){
final String hello = "Hello World";
return new TestInterface() {
public void say() {
System.out.println(hello);
}
};
}
}
从上面的代码可以看出,如果hello不定义为final类型的数据,也就在getTest()执行完以后就不存在了,这个时候,TestIngerface的实例在去调用say方法打印hello就会出现严重的问题。所以必须是final类型。
最后
以上就是激昂百褶裙为你收集整理的匿名内部类引入外部变量必须是final?的全部内容,希望文章能够帮你解决匿名内部类引入外部变量必须是final?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复