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解决这个问题感兴趣.
由于类型擦除,您无法在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)
当然,您将从编译器获得未经检查的警告,但您可以抑制它.