我一直在寻找一个差异,看到这样的代码:Java泛型扩展
public interface Vector<T extends Vector>
这是由以下代码取代:
public interface Vector<T extends Vector<T>>
我有麻烦缠绕我的周围的头,什么是区别?他们如何工作不同?
我一直在寻找一个差异,看到这样的代码:Java泛型扩展
public interface Vector<T extends Vector>
这是由以下代码取代:
public interface Vector<T extends Vector<T>>
我有麻烦缠绕我的周围的头,什么是区别?他们如何工作不同?
这两个声明之间的区别在于第一个声明会产生编译器警告,第二个声明不会。这是因为泛型类型应该总是和参数一起使用。
该声明确保如果X实现矢量它必须是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泛型参数化的语言在狂野。知道这是一个原始类型帮助我从ArrayList vs ArrayList等角度考虑它。 –
talloaktrees
非常有趣的递归泛型。 –