import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

interface Callback<T> {
    void call(T t);
}

class ConcreteCallback implements Callback<Collection<Object>> {
    public void call(final Collection<Object> data) {
        for (Object obj: data) {
            System.out.println(obj);
        }
    }
}

public class Main {
    private static <T> void call(final List<T> data, final Callback<? super List<? super T>> cb) {
        ArrayList<T> dat = new ArrayList<>();
        for (T object: data) {
            dat.add(object);
        }
        cb.call(dat);
    }

    public static void main(final String... args) {
        call(Arrays.asList(args), new ConcreteCallback());
    }
}