在参数化类型上使用绑定

Using bound on a parameterized type

我正在像 Java 1.8:

中那样创建一个接口和链表的实现
public interface MyList<E extends Comparable<E>> {
 .....
}

public class MyListImpl<E> implements MyList<E extends Comparable<E>>{
 ......
}

接口没有编译器问题,但 MyListImpl 给出错误 Unexpected Bound,而我有 E extends Comparable<E>>。我不确定为什么会发生此错误。

边界总是在泛型类型的声明中。那是 class 名称末尾的那个。 implements 子句中的那个正在使用已经声明的类型。所以:public class MyListImpl<E extends Comparable<E>> implements MyList<E>.

如果你想让它变得更好一点,使用<E extends Comparable<? super E>>。看起来一样,但不是;仅使用 Comparable<E>,您将无法支持 class,例如 java.sql.Timestamp,它扩展了 java.util.Date,实现了 Comparable<Date>。也就是说:Timestamp不是Comparable<Timestamp>而是Comparable<Date>,使用Comparable<? super E>就可以使用