Разница между этими двумя объявлениями заключается в том, что первый создает предупреждение о компиляторе, а второй - нет. Это связано с тем, что общие типы всегда должны использоваться с параметрами.
Эта декларация гарантирует, что если X реализует Vector он должен быть вектор X:
class X implements Vector<X> {
...
Все остальное будет производить ошибку компилятора.
На самом деле такая конструкция используется в JDK:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
...
это означает, что, когда мы заявляем перечислимую X оно (неявно) продолжается Enum<X>
Я думаю, что эта страница должна ответить на все ваши вопросы: HTTP://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it – robbmj
На самом деле это отвечает на мой вопрос. Иногда мне не удается разобрать язык параметризации java generics в дикой природы. Зная, что это сырой тип, я могу думать об этом с точки зрения ArrayList и ArrayList и т. Д. –
talloaktrees
Очень интересный рекурсивный родовой. –