- 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://www.codesnippet.cn/detail/1206201512856.html
来源: http://www.codesnippet.cn/detail/1206201512856.html