如何编写公共类MyList <e>?</e>

时间:2014-04-05 14:45:44

标签: java generics

所以,让我说我想写一个像ArrayList这样的东西 只是不是列表而是ArrayGrid(2维版本)

我已经发现ArrayList使用了Object [] 存储数据。

所以我做了一个

private Object[][] grid;

但我的getData方法抛出ClassCastException:

public E[][] getData(){
    return (E[][]) grid;
}

以上方法和本方法:

public E get(int x, int y){
    return (E) grid[x][y];
}

两人都给了我一个警告:&#34;类型安全:未选中从对象投射到E&#34;

我可以想象为什么,但我无法找到解决方案。那么ArrayList是如何做到的呢?

1 个答案:

答案 0 :(得分:1)

Here 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);
}

编辑:更正 但是如果你使用泛型类型,你可以这样做,而不是使用object:

    private E[][] grid; //seems to be impossible