请教用反射生成数组问题,比如我创建一个类为Student,我想用反射的方法生成Student数组
应该如何写

解决方案 »

  1.   

    比如我创建一个类为Student,我想用反射的方法生成Student数组什么意思,再解析一下
      

  2.   

    java.lang.reflect.Array.newInstance(Student.class, 10);
      

  3.   

    Student[][] stuArray = (Student[][])java.lang.reflect.Array.newInstance(Student.class, 2, 3);多维的数组也可以,后面的参数是可变的,几维就加几个参数。
      

  4.   

    比如正常创建数组是
    Student[] st=new Student[10];
    但是我写一个算法不知道要传进来的参数是什么类型,也就不能像上面那样创建数组。
    所以我想用反射的方法创建数组,请问如何解决啊?
      

  5.   

    上面别人都给出代码了啊,你也不仔细看看!!!看你传入什么参数,如果是类名则:
    Object array = java.lang.reflect.Array.newInstance(Class.forName(clzName), 10);
    如果是对象则
    Object array = java.lang.reflect.Array.newInstance(obj.getClass(), 10);
      

  6.   

    我不知道他是什么类型,你这么生成的话那与直接new是一个效果的。
    如果我想往生成的数组里添加元素那必须得数组的名字,但是名字不知道啊。
      

  7.   

    那你返回的只能是Object[]数组,我是想要返回的就是他传进来的数组类型,这样怎么创建啊
      

  8.   

    你可以看下那些容器类的T[] toArray(T[])方法的源码,利用反射先得到数组的class,再得到component的class,然后用上面的创建数组
      

  9.   

    我的代码是这样的 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类型的数组
      

  10.   

    Object [] a =  (Object[]) Array.newInstance(Class.forName("com.Student"),10);
      

  11.   

    这个o已经是Student对象了,这个是没有问题的。如果你是在你方法内部使用,反正你也无法在编译时指定这个实际类型,你使用Object[]就已经足够了就算作为返回值,外面再强制类型转换为Student[]就行了如果是JDK1.5以上,也可以泛型
    public <T> T[] c(T o) {
    return (T[]) Array.newInstance(o.getClass(), 10);
    }
      

  12.   

    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]);
            
        }}
      

  13.   

    public <T> T[] toArray(T[] a) {
        if (a.length < size) {
            T[] arr = (T[]) Array.newInstance(a.getClass().getComponentType(), size);
            ...
        }
        ...
    }
      

  14.   


    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;
    }