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

标签 java arrays generics reflection

我使用泛型创建了此类 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中,程序要求用户插入他喜欢的类的名称,所以我想使用ArrayBuilder构造函数来创建这种数组,但编译器不接受尖括号中的变量toManipulate。也许我必须从实例中提取通用类型来Manipulate?

最佳答案

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

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

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

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

关于java - 在运行时创建具有反射和泛型的类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764135/

相关文章:

java - 动画添加到android ListView ?

java - Java 有没有办法将数字作为参数传递?

C# System.Array 如何计算或查找它有多少维度?

c - 如何根据 C 中的用户输入创建 n 个数组

c# - 使用通用属性名称处理 lambda 表达式

c# - 当参数值作为接口(interface)传递时,如何解析泛型参数的类类型?

java - Apache Camel - 将文件名从路由 1 传递到 FTP 的路由 2

java - 没有数组名称的 JSONArray(地震示例)

php - for循环后,返回的数组是错误的

java - Doxygen 如何从通用接口(interface)中的重写方法继承文档?