相关疑难解决方法(0)

java如何实现内部类闭包?

在Java中,匿名内部类可以引用其本地范围中的变量:

public class A {
    public void method() {
        final int i = 0;

        doStuff(new Action() {
            public void doAction() {
                Console.printf(i);   // or whatever
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是这是如何实际实现的?如何i进入匿名内部doAction实现,为什么必须这样做final

java closures inner-classes

24
推荐指数
2
解决办法
4934
查看次数

内部方法中的匿名内部类

请看下面的代码:

import java.util.ArrayList;
import java.util.List;

class Main{
     public static <T> List<T> modifiedList(final List<T> list){
         return new ArrayList<T>(){
            @Override
             public boolean add(T element){
                 super.add(element);
                 return list.add(element);
             }
         };
    }

     public static void main(String[] args) {
         List<String> originalList=new ArrayList<String>();
         List<String> duplicateList=modifiedList(originalList);
         originalList.add("1");
         originalList.add("2");
         originalList.add("3");
         System.out.println(originalList+" "+duplicateList);
         duplicateList.add("4");
         duplicateList.add("5");
         duplicateList.add("6");
         System.out.println(originalList+" "+duplicateList);
     }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,在modifyList()方法中声明的匿名内部类的实例能够访问传递给该方法的参数.AFAIK Java为内部类创建单独的字节码文件.

任何人都可以解释Java在字节码级别如何处理这些局部变量绑定?我的意思是,Java如何跟踪作为参数传递给该方法的对象的引用?

任何帮助将不胜感激!

[抱歉我的英语不好!如果您理解我的问题,请编辑此帖并删除语法错误.谢谢!]

java anonymous-inner-class

6
推荐指数
2
解决办法
2800
查看次数