在方法中使用Comparable <e>或E作为参数有什么区别?

时间:2015-05-01 15:02:24

标签: java comparable

我正在编写一个内部使用List<E> orderedList的自定义排序列表类。我想知道这段代码之间有什么区别:

public void add(Comparable<E> e) {
    this.orderedList.add((E) e);
    Collections.sort(OrderedList,null);
}

和这一个:

public void add(E e) {
    this.orderedList.add(e);
    Collections.sort(thisOrderedList,null);
}

1 个答案:

答案 0 :(得分:1)

通过声明,您可以理解其中的差异。

在第一种方法中,您希望Comparable类型为E。在这里,您可以调用与Comparable相关的方法。

在第二种方法中,您直接期待E。此处E只是类型Object,您只能在Object中调用方法。

关于泛型来自java documentation

  

使用以下格式定义泛型类:

  class name<T1, T2, ..., Tn> { /* ... */ }
  

由尖括号(&lt;&gt;)分隔的类型参数部分跟在类名后面。它指定类型参数(也称为类型变量)T1,T2,...和Tn。

     

要更新Box类以使用泛型,可以通过更改代码&#34; public class Box&#34;来创建泛型类型声明。公共类Box&#34;。这引入了类型变量T,可以在类中的任何地方使用。

     

通过此更改,Box类变为:

/**
* Generic version of the Box class.
* @param <T> the type of the value being boxed
*/
public class Box<T> {
   // T stands for "Type"
   private T t;

   public void set(T t) { this.t = t; }
   public T get() { return t; }
}
  

如您所见,所有出现的Object都被T替换。类型变量可以是您指定的任何非基本类型:任何类类型,任何接口类型,任何数组类型,甚至是另一个类型变量。

     

这种技术可用于创建通用接口。