在运行时创建一个具有反射和泛型的 Class 数组

create an Array of a Class with reflection and generic at runtime

我用泛型制作了这个 class ArrayBuilder 来进行一些基本操作来管理 T 对象数组。

public class ArrayBuilder<T> {

@SuppressWarnings("unchecked")
public ArrayBuilder(Class<T> ct, int dim){
    container = (T []) Array.newInstance(ct, dim);
}

public T getElement(int index){
    return container[index];
}
public void setElement(int index, T value){
    container[index] = value; 
}
public T[] getContainer(){
    return container;
}

T[] container;

public static void main(String[] args) throws ClassNotFoundException {
    PrintStream ps = new PrintStream(System.out);
    Scanner sc = new Scanner(System.in);
    ps.print("che array desidera? ");
    String nameClass = "discover.";
    nameClass = nameClass + sc.nextLine();
    Class<?> toManipulate = Class.forName(nameClass);
    //Type type = toManipulate.getGenericSuperclass();
    ArrayBuilder<toManipulate> ab = new ArrayBuilder<toManipulate>(toManipulate, 10);

}

}

在 main 中,程序要求用户插入他喜欢的 Class 的名称,所以我想使用 ArrayBuilder 构造函数来创建这种数组,但编译器不接受变量 toManipulate in angular 括号。也许我必须从 toManipulate 实例中提取泛型类型?

泛型是一种编译时特性。您拥有的内容同样可以由原始类型处理,因为您在编译时不知道该类型是什么。

Class toManipulate = Class.forName(nameClass);
ArrayBuilder ab = new ArrayBuilder(toManipulate, 10);

或者如果你真的想使用泛型,你可以这样做

Class<?> toManipulate = Class.forName(nameClass);
ArrayBuilder<?> ab = new ArrayBuilder<Object>(toManipulate, 10);