java – 内部方法中的匿名内部类
发布时间:2020-12-15 02:50:19 所属栏目:Java 来源:网络整理
导读:请看下面的代码: import java.util.ArrayList;import java.util.List;class Main{ public static T ListT modifiedList(final ListT list){ return new ArrayListT(){ @Override public boolean add(T element){ super.add(element); return list.add(eleme
请看下面的代码:
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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |