package com.java.db; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import com.java.entity.BookShelf; import com.java.util.GetMetaDataCloumName; public class GetNewInstances<T> { Class[] cl = {}; Object[] ob = {}; /** * 每次用完之后设为空 不然会累加 */ public void setNullToArrays(){ this.cl = new Class[]{}; this.ob = new Object[]{}; } /** * copy Object数组 * * @param obj * 构造方法里需要的实际值 * @return */ public Object[] getObjectArrays(Object obj) { ob = Arrays.copyOf(ob,ob.length + 1); ob[ob.length - 1] = obj; return ob; } /** * copy Class 数组 * * @param cla * 要添加的class * * @return */ @SuppressWarnings("unchecked") public Class[] getClassArrays(Class<?> cla) { if (cla != null) { cl = Arrays.copyOf(cl,cl.length + 1); cl[cl.length - 1] = cla; return cl; }else{ return cl; } } /** * 得到类的实例 * * @param clazz * 要实例化的类 * @return 实例化之后的类 * @throws InstantiationException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws SecurityException * @throws InvocationTargetException * @throws NoSuchMethodException */ @SuppressWarnings("unchecked") public Object getClassNewInstance(Class<?> clazz) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException { Object oj = null; Constructor[] cons = clazz.getDeclaredConstructors();// 得到构造函数 Class[] cla = cons[1].getParameterTypes(); System.out.println("提示用户是否需要添加字段 构造函数参数的大小:"+cla.length); for (int i = 0; i < cla.length; i++) { String classStr = cla[i].toString(); // System.out.println("参数的类型:"+classStr); if (classStr.equals("class java.lang.String")) { getClassArrays(String.class); } else if (classStr.equals("int")) { getClassArrays(int.class); } else if (classStr.equals("double")) { getClassArrays(double.class); } else if (classStr.equals("boolean")) { getClassArrays(boolean.class); } else if (classStr.equals("float")) { getClassArrays(float.class); } else if (classStr.equals("class java.lang.Integer")) { getClassArrays(Integer.class); }else if(classStr.equals("class java.lang.Float")){ getClassArrays(Float.class); } } oj = clazz.newInstance();//返回当前对象 具体的实例化构造在BDOperater return oj; } /** * 通过构造函数得到具体的实例类 * @param clazz * @return * @throws IllegalArgumentException * @throws SecurityException * @throws InstantiationException * @throws IllegalAccessException * @throws InvocationTargetException * @throws NoSuchMethodException */ public Object getObjCon(Class<?> clazz) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{ Object obj=null; obj = this.getClassNewInstance(clazz); return obj; } /** * 得到对象的实例 * @param clazz * @return * @throws InstantiationException * @throws IllegalAccessException */ public Object getNewinstance(Class clazz) throws InstantiationException, IllegalAccessException{ Object obj = null; obj = clazz.newInstance(); return obj; } /** * 根据反射得到类中的所有属性 * @param clazz 需要被获取属性的类 * @return 属性集合 * @throws SecurityException * @throws IllegalArgumentException * @throws InstantiationException * @throws IllegalAccessException * @throws InvocationTargetException * @throws NoSuchMethodException */ public Field[] getFielsdArray(Class<Object> clazz) throws SecurityException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{ Field[] fields = null; fields = clazz.getDeclaredFields(); return fields; } /** * 根据字符串得到setter格式的属性 * @param str 需要格式化的属性 * @return */ public String getSetterStr(String str){ String info = null; String strValue = str.substring(0,1).toUpperCase(); info = "set"+strValue+str.substring(1,str.length()); return info; } /** * 把setXX还原为XX * @param str * @return */ public String setSetStr(String str){ String info = null; String strValue = str.substring(3,str.length()); String lower = strValue.substring(0).toLowerCase().substring(0,1); info = lower+str.substring(4,str.length()); return info; } /** * 得到类中的方法 * @param clazz 需要的得到方法的类 * @return */ public Method[] getMethodsArray(Class clazz){ Method[] methods = clazz.getMethods(); return methods; } /** * 根据list<map>实例化构造函数 * @param listMap * @param clazz * @param tableName 数据库名称 * @return * @throws NoSuchMethodException * @throws InvocationTargetException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException * @throws InstantiationException */ @SuppressWarnings({ "unchecked" }) public List<Object> getListByMap(List<Map<String,Object>> listMap,Class clazz,String tableName) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException{ List<Object> listLast = new ArrayList<Object>(); List<String> metaList = GetMetaDataCloumName.getCloumNameList(tableName); Iterator<Map<String,Object>> it = listMap.iterator(); while(it.hasNext()){ Map<String,Object> map = it.next(); Iterator<String> iitt = metaList.iterator(); while(iitt.hasNext()){ String info = iitt.next(); this.getObjectArrays(map.get(info)); } System.out.println("调用反射:"+this.cl.length+" "+this.ob.length); Object Tobj = this.getClassNewInstance(clazz).getClass().getConstructor(this.cl).newInstance(this.ob); listLast.add(Tobj); this.setNullToArrays(); } return listLast; } public static void main(String[] args) { GetNewInstances ge = new GetNewInstances(); System.out.println(ge.getSetterStr("nameSpace")=="setNameSpace"); System.out.println("1a"=="1a"); System.out.println(ge.setSetStr("setNameSpace")); } }
原文:http://blog.csdn.net/wiker_yong/article/details/24011603