手机
当前位置:查字典教程网 >编程开发 >Java >java反射技术与类使用示例
java反射技术与类使用示例
摘要:复制代码代码如下:packagecom.java.db;importjava.lang.reflect.Constructor;import...

复制代码 代码如下:

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

}

}

【java反射技术与类使用示例】相关文章:

java system类使用方法示例 获取系统信息

java使用jdbc链接Oracle示例类分享

在java中使用dom4j解析xml(示例代码)

Java输入输出流的使用详细介绍

java线程并发countdownlatch类使用示例

java使用dom4j操作xml示例代码

java中使用DES加密解密实例

java获取当前日期使用实例

java中final关键字使用示例详解

java使用rmi传输大文件示例分享

精品推荐
分类导航