Java反射:
1.对象存在JVM中,需要得到类的定义原型 ClassForName通过已知字符串来载入一个类的形式(字符串形式生成对象)
2.根据一个类的字符串形式,动态产生对象 (对象Object但类型不知道)
java.lang.Class:一个类的原型定义
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constrctor:代表类的构造方法
//------------------------------------------------------------------//
Class c=o.getclass();//得到对象的基本定义
Field[] fs=c.getDeclaredFields();//得到属性
Method[] ms=c.getDeclaredMethods();//得到方法
//------------------------------------------------------------------//
//由方法获取值------动态调用方法
Method m1=c.getDeclareMethod("getName",new Class[0]);//Class[0]填充作用,针对没有参数的
Method m2=c.getdeclaredMethod("setName",String.class)//
//类.class 对象 new Class[0]
m2.invoke(对象,“字符串对象”)//调用setName
(String)m1.invoke(对象,new Object[0])//调用getName
//------------------------------------------------------------------//
//由属性得到方法名字
Field[] fs=c.getDeclaredFields();
for(Field f:fs){
String fname=f,getName();//获取属性名称
String mname="get"+Character.toUpperCase(fname.charAt(0))+fname.substring(1);//转换成方法
Method m=c.getDeclaredMethod(mname,new Class[0]);//把这个名称放进去就得到这个方法
}
--------------通用dao(插入sql)-------------------------------------
tringBuffer sql = new StringBuffer("insert into ");
StringBuffer sql2 = new StringBuffer("");
StringBuffer sql3 = new StringBuffer("");
sql = sql.append(tablename + "(");
for (Field f : fd) {
sql = sql.append(f.getName());
sql.append(",");
Method m = c.getDeclaredMethod(
sql2.append(
("get"
+ Character.toUpperCase(f.getName()
.charAt(0)) + f.getName()
.substring(1))).toString(),
new Class[0]);
String rs = (String) m.invoke(o, new Object[0]);
sql3.append(rs);
sql3.append(",");
sql2=new StringBuffer("");
}
sql = new StringBuffer(sql.substring(0, sql.length() - 1));
sql = sql.append(") values(");
sql3 = new StringBuffer(sql3.substring(0, sql3.length() - 1));// 方法名
sql = sql.append(sql3);
sql = sql.append(")");
System.out.println(sql);
----------------------------------------------------------