Java 如何编写公共类MyList<;E>;?
假设我想写一些类似ArrayList的东西 只是不是一个列表,而是一个ArrayGrid(二维版本) 我已经发现ArrayList使用对象[] 存储数据 所以我做了一个Java 如何编写公共类MyList<;E>;?,java,generics,Java,Generics,假设我想写一些类似ArrayList的东西 只是不是一个列表,而是一个ArrayGrid(二维版本) 我已经发现ArrayList使用对象[] 存储数据 所以我做了一个 private Object[][] grid; 但是我的getData方法抛出了一个ClassCastException: public E[][] getData(){ return (E[][]) grid; } 上述方法和本方法: public E get(int x, int y){ return
private Object[][] grid;
但是我的getData方法抛出了一个ClassCastException:
public E[][] getData(){
return (E[][]) grid;
}
上述方法和本方法:
public E get(int x, int y){
return (E) grid[x][y];
}
两者都给了我一个警告:“类型安全:未经检查从对象强制转换为E”
我能想象为什么,但我找不到解决办法。那么ArrayList是如何做到这一点的呢?如果ArrayList.java文件有帮助的话
编辑:这是您要查找的部分:
@SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
/**
* Returns the element at the specified position in this list.
*
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
编辑:更正
但如果使用泛型类型,则可以这样做,而不是使用对象:
private E[][] grid; //seems to be impossible
如果查看
ArrayList
的源代码,它会抑制警告这里重要的是ClassCastException,而不是警告。请看我的答案以了解更多细节()是的。。他们在get()使用的elementData上使用@SuppressWarnings(“未选中”),不,我不能,因为它说“无法创建E的通用数组”