在运行时创建一个具有反射和泛型的 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);
我用泛型制作了这个 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);