Java 如何编写公共类MyList<;E>;?

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

假设我想写一些类似ArrayList的东西 只是不是一个列表,而是一个ArrayGrid(二维版本)

我已经发现ArrayList使用对象[] 存储数据

所以我做了一个

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的通用数组”