在参数化类型上使用绑定
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>
就可以使用
我正在像 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>
就可以使用