输入是一个list数组,里面的成员是String对象,现在要根据这个list数组自动生成一个javabean,javabean的成员是list数组的成员,而且list数组的长度不是固定的,每次的输入都可能不同。听说用java反射机制可以实现,但在网上找了很久也没找到好点的材料,小生不才,望各位csdn的xdjm能帮帮我..

解决方案 »

  1.   

    唉,一个复杂的问题....
    关于动态类生成...目前有2种可能的方法
    1.生成类的源文件,编译后动态载入......jsp就是这么做的
    2.用ASM一类工具修改字节码,在内存中操作类....麻烦啊麻烦
      

  2.   

    用BeanUtils可以生成动态javabean,已经解决了
    谢谢各位的关照~~
      

  3.   

    楼主拿分来吧
    import java.io.*;
    import java.util.List;
    import java.util.ArrayList;
    public class BeanFactory {
        
        public static String BeanBuild(String beanName,List valueList){
            String returnStr="";
            returnStr+="public class "+beanName+"{\n";
            for(int i=0;i<valueList.size();i++){
                returnStr+="String "+(String)valueList.get(i)+";\n";
            }
            for(int i=0;i<valueList.size();i++){
                returnStr+="public void set"+(String)valueList.get(i)+"(String value){\n"+
                        "this."+(String)valueList.get(i)+"=value;\n}\n";
            }
            for(int i=0;i<valueList.size();i++){
                returnStr+="public String get"+(String)valueList.get(i)+"(){\n"+
                        "return this."+(String)valueList.get(i)+";\n}\n";
            }
            returnStr+="}";
            return returnStr;
        }
        
        public static void BeanComplier(String beanName,String beanContent){
            com.sun.tools.javac.Main javac =  new com.sun.tools.javac.Main();
            try{
                File file=new File(beanName+".java");
                String filename = file.getName();
                System.out.println(filename);
                PrintWriter out = new PrintWriter(new FileOutputStream(file));
                out.println(beanContent);
                out.flush();
                out.close();
                String[] test = new String[] {"-d", System.getProperty("user.dir"),filename };
                javac.compile(test);
            }
            catch(Exception e){
                e.printStackTrace();
            }
            
        }
        
        public static void main(String[] s){
            List list=new ArrayList();
            list.add("name");
            list.add("description");
            BeanComplier("Test",BeanBuild("Test",list));
        }
    }