一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java反射技術與類使用示例

java反射技術與類使用示例

2019-11-18 14:44Java教程網 JAVA教程

這篇文章主要介紹了java反射技術與類使用示例,需要的朋友可以參考下

代碼如下:

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"));
 }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国精品午夜dy8888狼人 | 天天干女人 | 精品国产欧美一区二区三区成人 | 亚洲国产99在线精品一区69堂 | poren黑人| 2019天天干夜夜操 | 日韩在线视频二区 | 国产一级毛片国语版 | 性xxxx中国| 亚洲AV无码专区国产精品麻豆 | 色播影院性播影院私人影院 | 久草热8精品视频在线观看 久草草在线视视频 | 四虎影院大全 | 国产一区二区在线看 | 韩国理论片最新第一页 | 亚洲精品久久久打桩机 | 紧身裙女教师波多野结衣 | 欧美国产视频 | 国产一区二区三区毛片 | 男生操女生漫画 | 国产高清在线不卡 | 好姑娘在线观看完整版免费 | 99久久免费国内精品 | 色综合亚洲天天综合网站 | 午夜欧美福利视频 | 日韩亚洲国产激情在线观看 | 特级非洲黑人一级毛片 | 国产精品激情综合久久 | 扒开老师两片湿漉的肉 | 久久毛片视频 | 午夜小视频网站 | 成人精品亚洲 | 色哟呦| 青青草原国产视频 | 嗯啊好大好爽 | 亚洲色图首页 | 亚洲天堂影视 | 香蕉精品 | 色综色天天综合网 | 皇上撞着太子妃的秘密小说 | 婷婷在线观看香蕉五月天 |