import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.util.Iterator;
import java.util.List;

/**
 * @author Anastasiya Solodkaya.
 */
public class IteratedLoop6 {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
        MethodHandle h1 = MethodHandles.iteratedLoop(EmptyIterator.iteratorHandle, null, EmptyIterator.bodyVStringList);
        System.out.println(h1.type());
    }

    /**
     * Class contains set of methods for generating empty iterating loop.
     */
    private static class EmptyIterator {
        static void bodyVStringList(String e, List<String> s) {
        }
        static Iterator<String> iterator(List<String> s, int a) {
            return s.iterator();
        }

        private static MethodHandle bodyVStringList;

        private static MethodHandle iteratorHandle;

        static {
            try {
                bodyVStringList = MethodHandles.lookup().findStatic(EmptyIterator.class, "bodyVStringList",
                        MethodType.methodType(void.class, String.class, List.class));
                iteratorHandle = MethodHandles.lookup().findStatic(EmptyIterator.class, "iterator",
                        MethodType.methodType(Iterator.class, List.class, int.class));
            } catch (NoSuchMethodException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}
