2011-09-02 37 views
8

我有几个关于思想如下:语法<T延伸<T>类> Java中

public interface MaxStack<T extends Comparable <T>> 

1 - 为什么实现MaxStack类应该这样写:

public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T> 

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

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

3-<T extends Comparable<T>><T extends Comparable>之间有什么区别 - 如果我需要比较我班的元素,那么两者都是O.K,不是吗?

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

+0

款式就在鸡蛋里挑骨头:你的公共类的名字是不是首字母大写,避免误解的约定。虽然它不是嵌套类的问题,但在这种情况下,它是一个公共类... –

+0

谢谢@Tassos。 – Numerator

+0

为获得最佳效果,请使用'> – newacct

回答

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

  2. 原因与上面相同。不需要再次指定相同类型参数的边界。

  3. <T extends Comparable<T>>意味着T必须实现Comparable接口,可以比较两个T实例。而<T extends Comparable>意味着T实现Comparable,使它可以比较两个Object一般。前者更具体。

,如果我需要比较bewteen在我的课的元素,都将是O.K, 没有?

那么,在技术上你可以使用这两个实现相同的结果。但对于申报<T extends Comparable>它将涉及您可避免使用类型安全<T extends Comparable<T>>

2

1)班有一个绑定(extends Comparable <T>类型参数T)不必要的强制类型转换,这个参数传递到接口(这需要相同的界限在这里)。当传递一个类型参数时,你不能重复它的约束 - 为什么你应该这样做? 2)像1)那样,类型参数有其约束的声明,不需要重复。

澄清:

第一种类型的参数occurence(这里后面的接口或类名)是其声明。以下任何发生都是一种用法。你甚至不会在每次使用它时写一个变量类型声明,对吧?“

2

”3-<T extends Comparable<T>><T extends Comparable>之间有什么区别 - 如果我需要比较我的班级中的元素,那么这两个元素都是O.K,不是?

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

相关问题