在运行时创建具有反射和泛型的类的数组 [英] create an Array of a Class with reflection and generic at runtime
问题描述
我使用泛型制作了此类ArrayBuilder,以进行一些基本操作来管理T对象的数组.
I made this class ArrayBuilder with generics to make some basic operation to manage an array of T objects.
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);
}
}
主要,程序要求用户插入自己喜欢的Class的名称,因此我想使用ArrayBuilder构造函数来创建这种数组,但编译器不接受尖括号中的toManipulate变量.也许我必须从实例中提取泛型Type才能进行操作?
in main, program asks to the user to insert the name of the Class wich he prefers, so I want to use ArrayBuilder constructor to create this kind of array but compiler doesn't accept variable toManipulate in the angular brackets. Maybe Do I have to extract generic Type from the instance toManipulate?
推荐答案
泛型是编译时功能.同样,原始类型也可以处理您拥有的内容,因为您在编译时不知道类型是什么.
Generics are a compile time feature. What you have can equally be handled by raw types as you don't know what the type is at compile time.
Class toManipulate = Class.forName(nameClass);
ArrayBuilder ab = new ArrayBuilder(toManipulate, 10);
或者如果您真的想使用泛型,则可以
or if you really want to use generics you can do
Class<?> toManipulate = Class.forName(nameClass);
ArrayBuilder<?> ab = new ArrayBuilder<Object>(toManipulate, 10);
这篇关于在运行时创建具有反射和泛型的类的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!