我想知道使用Java泛型编程实现类和将类型保留为通用对象类之间是否有任何显著的优点/缺点?也许下面的代码澄清了我正在寻找的东西?
这第一段代码显示了如何使用通用对象类类型来实现列表:
public class myList {
private static int DEFAULT_CAPACITY = 16;
private int size, capacity;
private Object[] dataArray;
myList(){
this(DEFAULT_CAPACITY);
}
myList(int defaultSize){
capacity = defaultSize;
size = 0;
dataArray =new Object[defaultSize];
}
public int getSize(){return size;}
public void insert(int loc, Object o){
if (size+1 <= capacity){
for (int i=size; i> loc-1; i--)
dataArray[i] = dataArray[i-1];
dataArray[loc-1] = o;
size++;
}
}
public Object getItem(int loc){
return dataArray[loc-1];
}
}下面的代码使用Java泛型编程展示了相同的功能:
public class MyList<E> {
private int size = 0;
private static final int DEFAULT_CAPACITY = 10;
private Object dataArray[];
public MyList() {
dataArray = new Object[DEFAULT_CAPACITY];
}
public void insert(int loc, E e) {
if (size+1 <= capacity){
for (int i=size; i> loc-1; i--)
dataArray[i] = dataArray[i-1];
dataArray[loc-1] = e;
size++;
}
}
public E get(int loc) {
return (E) elements[loc-1];
}
} 发布于 2012-10-31 17:10:34
Generic方法的优势在于:
假设您创建了一个Integer列表。
使用Generic方法时,如果您尝试将其他内容放入列表中,将在编译时得到一个错误。
使用Object方法,您直到运行时才会看到这个错误,这是很难找到bug的秘诀。
发布于 2012-10-31 17:13:13
首先,您的通用MyList<E>的dataArray应该是通用的。
class MyList<E> {
private E dataArray[];
public MyList(Class<E> c,int size) {
dataArray = (E[]) Array.newInstance(c,size);
}
}优点-你的列表在本质上是类型安全的,这意味着在一般的对象类型中,你可以添加任何类型,这些类型在你进行排序等操作时可能会导致问题……
发布于 2012-10-31 17:19:04
让我为你分解这件事.
- Generics可以实现到类、接口、方法、字段,但它最重要的用法是使Collection 类型安全。
-这就是Collections在Java语言中是如何进行类型保护的,因此错误的类型不会进入集合中,因为集合在代码时间期间只检查,而在< Compilation >D18>期间检查不是<>e217>..ie猫对象不应进入类型为Dog的集合。
-有一个称为Erasure的过程,在该过程中,编译器在编译时期间从泛型类中删除类型参数和类型实参,使其在运行时期间成为原始类型,以便与编写WithOut泛型的代码保持向后兼容性。
例如:
Box<String> 成为 Box
https://stackoverflow.com/questions/13154450
复制相似问题