我正在编写一个内部使用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);
}
答案 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替换。类型变量可以是您指定的任何非基本类型:任何类类型,任何接口类型,任何数组类型,甚至是另一个类型变量。
这种技术可用于创建通用接口。