Java使用泛型来稍后设置数组的基本类型

Nil*_*ils 0 java generics reflection

我试图在Java中编写一些简单的数字代码,以后可以在float和double之间进行选择.我的类的简化版本如下所示:

public class UniformGrid<T> {

    public T[] data;

    public UniformGrid(int arrayDim) {

        data = new T[arrayDim];

    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用我generic array creation在尝试编译时遇到错误.谷歌搜索和阅读我学到的java.lang.reflect.Array并尝试使用的一些SO答案

    data = (T[]) Array.newInstance(T.class, arrayDim);
Run Code Online (Sandbox Code Playgroud)

这也没有用,因为T(可能)是一种原始类型.我的Java知识非常生疏(特别是涉及泛型时),我想知道为什么new运算符不能与泛型数组类型一起使用.当然,我也对如何用Java解决这个问题感兴趣.

Jef*_*rey 7

由于类型擦除,您无法在Java中创建通用数组.解决这个问题的最简单方法是使用aa List<T>.但是如果必须使用数组,则可以使用Object[]数组,并确保只将T对象放入其中.(这是策略ArrayList.)

例如:

private Object[] data = new Object[10];
private int size = 0;

public void add(T obj) {
    data[size++] = obj;
}

public T get(int i){
    return (T) data[i];
}
Run Code Online (Sandbox Code Playgroud)

当然,您将从编译器获得未经检查的警告,但您可以抑制它.