源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java反射技术与类使用示例

  • 时间:2022-05-13 02:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java反射技术与类使用示例
[u]复制代码[/u] 代码如下:
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"));  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部