欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java反射技術與類使用示例

 更新時間:2014年04月13日 09:20:14   作者:  
這篇文章主要介紹了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數(shù)組
  *
  * @param obj
  *            構造方法里需要的實際值
  * @return
  */
 public Object[] getObjectArrays(Object obj) {
   ob = Arrays.copyOf(ob,ob.length + 1);
   ob[ob.length - 1] = obj;
   return ob;
 }

 /**
  * copy Class 數(shù)組
  *
  * @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();// 得到構造函數(shù)
  Class[] cla = cons[1].getParameterTypes();
     System.out.println("提示用戶是否需要添加字段   構造函數(shù)參數(shù)的大小:"+cla.length);
  for (int i = 0; i < cla.length; i++) {
   String classStr = cla[i].toString();
   // System.out.println("參數(shù)的類型:"+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;
 }
 /**
  * 通過構造函數(shù)得到具體的實例類
  * @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;
 }
 /**
  * 根據(jù)反射得到類中的所有屬性
  * @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;
 }
    /**
     * 根據(jù)字符串得到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;
 }
 /**
  * 根據(jù)list<map>實例化構造函數(shù)
  * @param listMap
  * @param clazz
  * @param tableName 數(shù)據(jù)庫名稱
  * @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("調(diào)用反射:"+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"));
 }
}

相關文章

  • Java自定義簡單標簽實例

    Java自定義簡單標簽實例

    Java自定義簡單標簽可以方便的在頁面輸出信息,并且對于權限的控制,和對于Jsp標簽和servlet代碼的分離有著很好的作用
    2013-07-07
  • RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化

    RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化

    這篇文章主要介紹了RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化,消費者限流是用于消費者每次獲取消息時限制條數(shù),注意前提是手動確認模式,并且在手動確認后才能獲取到消息,感興趣想要詳細了解可以參考下文
    2023-05-05
  • SpringBoot使用AOP實現(xiàn)統(tǒng)一角色權限校驗

    SpringBoot使用AOP實現(xiàn)統(tǒng)一角色權限校驗

    這篇文章主要介紹了SpringBoot如何使用AOP實現(xiàn) 統(tǒng)一角色權限校驗,文中有詳細的代碼示例講解和操作流程,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • 最好的Java 反編譯工具的使用對比分析

    最好的Java 反編譯工具的使用對比分析

    恰好最近工作中也需要用到 Java 反編譯,所以這篇文章介紹目前常見的的幾種 Java 反編譯工具的使用,在文章的最后也會通過編譯速度、語法支持以及代碼可讀性三個維度,對它們進行測試,分析幾款工具的優(yōu)缺點,感興趣的朋友一起看看吧
    2021-05-05
  • Springboot接收文件與發(fā)送文件實例教程

    Springboot接收文件與發(fā)送文件實例教程

    最近工作中遇到個需求,springboot簡單的上傳文檔或者圖片,并且進行操作,操作完后進行保存指定路徑,下面這篇文章主要給大家介紹了關于Springboot接收文件與發(fā)送文件的相關資料,需要的朋友可以參考下
    2023-05-05
  • SpringBoot中如何啟動Tomcat流程

    SpringBoot中如何啟動Tomcat流程

    這篇文章主要介紹了SpringBoot中如何啟動Tomcat流程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解MyBatis特性之動態(tài)SQL

    詳解MyBatis特性之動態(tài)SQL

    動態(tài) SQL 是 MyBatis 的強大特性之一,這篇文章我們將結合動態(tài)SQL完成更加復雜的 SQL 操作,文章通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Java項目如何打包成Jar的實現(xiàn)步驟

    Java項目如何打包成Jar的實現(xiàn)步驟

    一般情況下我們都是使用Java項目直接部署發(fā)布,有時需要我們將寫好的項目打成jar包,方便后期調(diào)用,本文主要介紹了Java項目如何打包成Jar,感興趣的可以了解一下
    2023-11-11
  • Spring JPA聯(lián)表查詢之OneToMany源碼解析

    Spring JPA聯(lián)表查詢之OneToMany源碼解析

    這篇文章主要為大家介紹了Spring JPA聯(lián)表查詢之OneToMany源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Android bdflow數(shù)據(jù)庫神器的使用

    Android bdflow數(shù)據(jù)庫神器的使用

    這篇文章主要介紹了Android bdflow數(shù)據(jù)庫神器的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論