<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    java使用反射技術示例

    時間:2025-04-26 06:34:23 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{

      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

      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

      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

      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(Classclazz) 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實例化構造函數

      * @param listMap

      * @param clazz

      * @param tableName 數據庫名稱

      * @return

      * @throws NoSuchMethodException

      * @throws InvocationTargetException

      * @throws SecurityException

      * @throws IllegalArgumentException

      * @throws IllegalAccessException

      * @throws InstantiationException

      */

      @SuppressWarnings({ "unchecked" })

      public ListgetListByMap(List<Map> listMap,Class clazz,String tableName) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException{

      ListlistLast = new ArrayList();

      ListmetaList = GetMetaDataCloumName.getCloumNameList(tableName);

      Iterator<Map> it = listMap.iterator();

      while(it.hasNext()){

      Mapmap = it.next();

      Iteratoriitt = 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"));

      }

      }

    【java使用反射技術示例】相關文章:

    java system類使用方法示例05-03

    Java反射機制07-02

    java中反射機制05-26

    關于Java 反射的簡介05-12

    Java反射機制學習總結05-19

    深入理解java的反射07-16

    Java反射機制應用實踐05-31

    java運行異常示例02-07

    Java編程學習示例07-31

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人