日期:2014-05-20 浏览次数:20619 次
public Object newInstance(Class c) { if (c==boolean.class || c==Boolean.class) { //基本类型,直接返回 return new Boolean(false); } else if (c==byte.class || c==Byte.class) { //其他的LZ自己补充 return new Byte(0); } else if (c==short.class || c==Short.class) { } else if (c==char.class || c==Character.class) { } else if (c==int.class || c==Integer.class) { } else if (c==long.class || c==Long.class) { } else if (c==float.class || c==Float.class) { } else if (c==double.class || c==Double.class) { } else if (c==String.class) { } else if (c.isArray()) { //数组 } Object o = null; Constructor con = c.getConstructors()[0]; //因为不知道构造方法信息,取第一个构造方法 con.setAccessible(true); Class[] pc = con.getParameterTypes(); //获取构造方法参数 Object[] vals = new Object[pc.length]; for (int i=0; i<pc.length; i++) { vals[i] = newInstance(pc[i]); //递归获取参数的实例 } o = con.newInstance(vals); //生成实例 //可以继续设置属性 for (Field f : c.getDeclaredFields()) { Class fc = f.getType(); f.setAccessible(true); if (f.get(o) == null) { Object fo = newInstance(fc); //递归获得属性实例 f.set(fo); } } return o; }