请教用反射生成数组问题,比如我创建一个类为Student,我想用反射的方法生成Student数组 请教用反射生成数组问题,比如我创建一个类为Student,我想用反射的方法生成Student数组应该如何写 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如我创建一个类为Student,我想用反射的方法生成Student数组什么意思,再解析一下 java.lang.reflect.Array.newInstance(Student.class, 10); Student[][] stuArray = (Student[][])java.lang.reflect.Array.newInstance(Student.class, 2, 3);多维的数组也可以,后面的参数是可变的,几维就加几个参数。 比如正常创建数组是Student[] st=new Student[10];但是我写一个算法不知道要传进来的参数是什么类型,也就不能像上面那样创建数组。所以我想用反射的方法创建数组,请问如何解决啊? 上面别人都给出代码了啊,你也不仔细看看!!!看你传入什么参数,如果是类名则:Object array = java.lang.reflect.Array.newInstance(Class.forName(clzName), 10);如果是对象则Object array = java.lang.reflect.Array.newInstance(obj.getClass(), 10); 我不知道他是什么类型,你这么生成的话那与直接new是一个效果的。如果我想往生成的数组里添加元素那必须得数组的名字,但是名字不知道啊。 那你返回的只能是Object[]数组,我是想要返回的就是他传进来的数组类型,这样怎么创建啊 你可以看下那些容器类的T[] toArray(T[])方法的源码,利用反射先得到数组的class,再得到component的class,然后用上面的创建数组 我的代码是这样的 public static Object[] toNoNullArray(Object[] o){ List l=new ArrayList(); int size=0; for(int i=0;i<o.length;i++){ if(o[i]!=null){ l.add(o[i]); size++; } } Object[] oo=new Object[size]; for(int i=0;i<size;i++){ oo[i]=l.get(i); } return oo; }我想实现的功能是他传进来什么类型的数组,我就给他返回什么类型的数组,但是我现在的功能是他传进来什么类型的数组,我只能返回给他Object类型的数组 Object [] a = (Object[]) Array.newInstance(Class.forName("com.Student"),10); 这个o已经是Student对象了,这个是没有问题的。如果你是在你方法内部使用,反正你也无法在编译时指定这个实际类型,你使用Object[]就已经足够了就算作为返回值,外面再强制类型转换为Student[]就行了如果是JDK1.5以上,也可以泛型public <T> T[] c(T o) { return (T[]) Array.newInstance(o.getClass(), 10);} package com;public class Student { private String name; private String no; public Student(String name, String no) { super(); this.name = name; this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } @Override public String toString() { // TODO Auto-generated method stub return "name =" + name + "," + "no = " + no; } }package com;import java.lang.reflect.Array;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.Arrays;public class Main { public static void main(String[] args) throws NegativeArraySizeException, ClassNotFoundException { // TODO Auto-generated method stub Object [] a = (Object[]) Array.newInstance(Class.forName("com.Student"),10);// a[0] = new Student("test","001");// System.out.println(a[0]); }} public <T> T[] toArray(T[] a) { if (a.length < size) { T[] arr = (T[]) Array.newInstance(a.getClass().getComponentType(), size); ... } ...} public static <T>T[] toNoNullArray(T[] o){ List l=new ArrayList(); int size=0; for(int i=0;i<o.length;i++){ if(o[i]!=null){ l.add(o[i]); size++; } } T[] a = (T[]) Array.newInstance(o.getClass().getComponentType(), size); for(int i=0;i<size;i++){ Arrays.fill(a, i,i+1,l.get(i)); } return a; } 请问Java中AWT和Swing的区别,以及重要性. 内存溢出的问题 java在后台生成excel时如何将生成的文件放到自己指定的目录下面? 流问题:flush()方法为什么刷不出去? 请哪位高手修改一下这个小程序 JAVA Application 怎么调用其他程序写的.DLL动态连接库???? getInstance()后一个还是多个实例问题 求高手点拨一个“java.lang.IllegalArgumentException”异常的错误原理与修改方法. 如何将bmp转化为wbmp呀 驱动下载 1. 怎么把两个字符串的值交换 而不使用中间变量 JAVA初学者的疑问?
Student[] st=new Student[10];
但是我写一个算法不知道要传进来的参数是什么类型,也就不能像上面那样创建数组。
所以我想用反射的方法创建数组,请问如何解决啊?
Object array = java.lang.reflect.Array.newInstance(Class.forName(clzName), 10);
如果是对象则
Object array = java.lang.reflect.Array.newInstance(obj.getClass(), 10);
如果我想往生成的数组里添加元素那必须得数组的名字,但是名字不知道啊。
List l=new ArrayList();
int size=0;
for(int i=0;i<o.length;i++){
if(o[i]!=null){
l.add(o[i]);
size++;
}
}
Object[] oo=new Object[size];
for(int i=0;i<size;i++){
oo[i]=l.get(i);
}
return oo;
}
我想实现的功能是他传进来什么类型的数组,我就给他返回什么类型的数组,但是我现在的功能是他传进来什么类型的数组,我只能返回给他Object类型的数组
public <T> T[] c(T o) {
return (T[]) Array.newInstance(o.getClass(), 10);
}
private String no;
public Student(String name, String no) {
super();
this.name = name;
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "name =" + name + "," + "no = " + no;
}
}
package com;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
public class Main { public static void main(String[] args) throws NegativeArraySizeException, ClassNotFoundException {
// TODO Auto-generated method stub
Object [] a = (Object[]) Array.newInstance(Class.forName("com.Student"),10);
// a[0] = new Student("test","001");
// System.out.println(a[0]);
}}
if (a.length < size) {
T[] arr = (T[]) Array.newInstance(a.getClass().getComponentType(), size);
...
}
...
}
public static <T>T[] toNoNullArray(T[] o){
List l=new ArrayList();
int size=0;
for(int i=0;i<o.length;i++){
if(o[i]!=null){
l.add(o[i]);
size++;
}
}
T[] a = (T[]) Array.newInstance(o.getClass().getComponentType(), size);
for(int i=0;i<size;i++){
Arrays.fill(a, i,i+1,l.get(i));
}
return a;
}