Java – anonymous inner classes in Inner methods
•
Java
See the following code:
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); }
In the above code, the instance of the anonymous inner class declared in the modifylist () method can access the parameters passed to the method AFAIK Java creates a separate bytecode file for internal classes
Can anyone explain how Java handles these local variable bindings at the bytecode level? I mean, how does Java track references to objects passed as parameters to the method?
Any help will be appreciated!
[sorry, my English is not good! If you understand my problem, please edit this post and delete grammar errors. Thank you!]
Solution
Essentially, the code is rewritten by the compiler (note that I didn't try to compile it... There may be an error):
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); } }
and
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); }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码