The difference between these two declarations is that the first one produces compiler warning and the second one doesn't. This is because generic types should always be used with parameters.
This declaration ensures that if X implements Vector it must be Vector of X :
class X implements Vector<X> {
...
Anything else will produce a compiler error.
Actually such construct is used in JDK:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
...
it means that when we declare enum X it (implicitly) extends Enum<X>