Пожалуйста, посмотрите на следующий код:
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);
}
В приведенном выше коде экземпляр анонимного внутреннего класса, объявленный в методеifiedDist (), может получить доступ к параметру, переданному этому методу. AFAIK Java создает отдельный файл байт-кода для внутренних классов.
Может кто-нибудь объяснить, как эти привязки локальных переменных обрабатываются Java на уровне байт-кода? Я имею в виду, как именно Java отслеживает ссылку на объект, переданный в качестве параметра этому методу?
Любая помощь будет принята с благодарностью!
[Извините за мой плохой английский! Если вы понимаете мой вопрос, пожалуйста, отредактируйте этот пост и удалите грамматические ошибки. Спасибо!]