abstract class List { private final T head; private final List tail; protected List() { this.head = null; this.tail = null; } private List(T head, List tail) { this.head = head; this.tail = tail; } protected T getHead() { return head; } private static class Cons extends List { private Cons(T head, List tail) { super(head, tail); } } interface Result { } // The method were the error message is displayed (In class List): public static Result>> zip(List listT, List listU) { List> list = null; List workListT = listT; List workListU = listU; while (workListT.head != null) { list = new Cons<>(new Tuple<>(workListT.getHead(), workListU.getHead()), list); workListT = workListT.tail; workListU = workListU.tail; } return null; } } class Tuple { public final T _1; public final U _2; public Tuple(T t, U u) { _1 = t; _2 = u; } }