语法<T在Java中扩展了Class >

关于以下内容,我有几点想法:

public interface MaxStack<T extends Comparable > 

1 – 为什么实现MaxStack的类应该像这样编写:

 public class MaxStackclass<T extends Comparable > implements MaxStack 

而不是public class MaxStackclass<T extends Comparable > implements MaxStack<T extends Comparable >

2-为什么这个类的私有变量,当我使用generics时,应该只用编写而不用<T extnds Comparable> ? 例如, private List stack= new ArrayList();

3 – <T extends Comparable>之间有什么区别 – 如果我需要比较我class级中的bewteen元素,两者都可以,不是吗?

编辑:我认为3的问题是,它可能允许插入以第二种方式定义的列表,以便具有不同的元素,这些元素都可以从可比较的方面扩展,然后当我想比较它们时,它将不可能,因为我们无法将String与Integer进行比较,所以都从Comparable扩展。

  1. 在声明maxStackclass>您已经在T上表达了边界。 所以你不需要它了。

  2. 原因与上述相同。 无需再次在同一类型参数上指定边界。

  3. >表示T必须实现可比较两个T实例的Comparable接口。 虽然意味着T实现了Comparable ,因此它可以比较两个Object 。 前者更具体。

如果我需要比较class上的各种元素,两者都可以,不是吗?

那么,从技术上讲,你可以使用两者达到相同的效果。 但是对于声明 ,它将涉及不必要的强制转换,你可以避免使用类型safe >

1)类有一个带有bound的类型参数Textends Comparable ),这个参数传递给接口(这里需要相同的绑定)。 传递类型参数时,您不能重复它的约束 – 为什么要这样做?

2)如1),类型参数声明其绑定,不重复必要。

澄清:

第一个类型参数出现(在接口或类名后面)是它的声明。 任何后续发生都是一种用法。 你每次使用它时都不会写一个变量类型声明,对吧?

“3 – >之间有什么区别 – 如果我需要比较我class级中的bewteen元素,两者都可以,不是吗?”

不,两者都不会好的。 假设我有一个类Foo ,它implements Comparable但类Foo和Bar彼此没有关系。 然后Foo无法与Foo类型的其他对象进行比较。 >会将此问题视为一个问题。 不会。

 > 

更多细节在这里