Я встречаю Java-код следующим образом:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
В чем разница между всеми тремя из вышеперечисленных и что они называют этим типом деклараций классов или интерфейсов в Java?