繁体   English   中英

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

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

我使用泛型制作了此类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);

}

}

总的来说,程序要求用户插入自己喜欢的Class的名称,因此我想使用ArrayBuilder构造函数来创建这种数组,但是编译器不接受尖括号中的toManipulate变量。 也许我必须从实例中提取泛型Type才能进行操作?

泛型是编译时功能。 同样,原始类型也可以处理您拥有的内容,因为您在编译时不知道类型是什么。

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

或者如果您真的想使用泛型,则可以

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM