java – 内部方法中的匿名内部类

前端之家收集整理的这篇文章主要介绍了java – 内部方法中的匿名内部类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请看下面的代码
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);
     }

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

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

任何帮助将不胜感激!

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

解决方法

本质上,代码由编译器重写(注意我没有尝试编译它……可能有错误):
class Main$1<T>
    extends ArrayList<T>
{
    private final List<T> list;

    Main$1(final List<T> a)
    {
        list = a;
    }

    @Override
    public boolean add(T element)
    {
        super.add(element);
        return list.add(element);
    }
}

class Main{
     public static <T> List<T> modifiedList(final List<T> list)
     {
         return new Main$1<T>(list);
     }

     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);
     }

猜你在找的Java相关文章