实现vs在Java中的泛型中扩展

Pop*_*orn 12 java generics interface extend implements

有人能告诉我第一个和第二个代码之间的区别是什么吗?MaxPQ代表优先级队列,它是可以相互比较的"密钥"对象的集合.

代码1:

public class MaxPQ<Key extends Comparable<Key>>{
...
}
Run Code Online (Sandbox Code Playgroud)

代码2:

public class MaxPQ<Key implements Comparable<Key>>{
...
}
Run Code Online (Sandbox Code Playgroud)

第二个代码不能编译,但是对于我来说,为什么在使用泛型时需要扩展而不是实现接口是不直观的.

Tom*_*icz 11

差异非常简单:第二个代码片段无法编译,永远不会.对于extends类和接口,您总是使用泛型.也super可以在那里使用关键字,但它具有不同的语义.

  • @Mark一个原因是:`Key`可能是一个接口本身,突然它会再次`extends`,即使Comparable是一个接口.因此,由于在所有情况下都无法完全正确,因此只需始终不一致就是首选. (3认同)