Please have a look at following code :
import java.util.ArrayList;
import java.util.List;
class Main{
public static List modifiedLis
Essentially the code is rewritten by the complier as (note I didn't try to compile it..., might have errors):
class Main$1
extends ArrayList
{
private final List list;
Main$1(final List a)
{
list = a;
}
@Override
public boolean add(T element)
{
super.add(element);
return list.add(element);
}
}
and
class Main{
public static List modifiedList(final List list)
{
return new Main$1(list);
}
public static void main(String[] args)
{
List originalList=new ArrayList();
List 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);
}