code: private <T> Iterator<T> emptyIt() {
          return new Iterator<T>() {
              @Override
              public boolean hasNext() {
                  return false;
              }
              @Override
              public T next() {
                  return null;
              }
          };
      }
docs: An empty iterator with hasNext always false.
  @param <T> generic type,
  since java can't infer it will be Object
  @return the null iterator