java语言

java使用反射技术示例

时间:2022-10-05 05:02:17 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使用反射技术示例】相关文章:

光的反射教学设计04-30

警棍使用技术学院教案MicrosoftWord文档11-10

什么是Java10-28

java类的构成04-28

Java语言的内部类12-13

java线程的几种状态12-14

Java基础知识精选02-20

新手如何学习Java07-06

Java语言的编程特点03-18

如何学习JAVA开发04-26