import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class DirectPropertyAccessor {
/**
* @param args
* @throws SecurityException
* @throws NoSuchFieldException
*/
public static void main(String[] args) throws NoSuchFieldException, SecurityException {
// TODO Auto-generated method stub
Classa a=new Classa("hheheh",10);
DirectGetter dg;
try {
dg = new DirectGetter(a.getClass().getDeclaredField("student"),
a.getClass(),a.getClass().getMethod("setStudent",String.class));
dg.get(a);
System.out.println(dg.get(a));// 输出hheheh
dg.set(a,"yz");
System.out.println(dg.get(a));// 输出yz
dg.domethod(a, "hello");
System.out.println(dg.get(a));// 输出hello
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(execSQL(a));
}
public static String execSQL(Classa s){
StringBuffer sb=new StringBuffer();
sb.append("insert into");
String buffer=s.getClass().toString();
if(buffer!=""){
System.out.println(buffer);
int pos=buffer.indexOf("$");
//String packagename="";
if(pos!=-1){
// packagename+=buffer.substring(pos).substring(buffer.lastIndexOf(".")+1);
// sb.append(packagename+"(");
sb.append(buffer.substring(pos+1));
}
Class cs=null;
try {
cs=Class.forName(buffer);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Field fields[]=cs.getDeclaredFields();//所有的字段
int i=0;
for(;i<fields.length-1;i++){
sb.append(fields[i].getName()+",");
}
sb.append(fields[i].getName());
sb.append(")"+"value"+"(");
Method method[]=cs.getDeclaredMethods();
for(int i1=0;i1<method.length;i1++){
try {
// 对反射对象底层的方法进行调用,获得调用该方法所得到的值
Object retval=method[i1].invoke(method[i1].getName(), null);
sb.append(retval.toString()+",");
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return sb.toString();
}
public static final class DirectGetter {
private final Field field;
private final Class cls;
private final Method method;
DirectGetter(Field field,Class cls,Method method)
{
this.field=field;
this.cls=cls;
this.method=method;
}
public Object get(Object obj)
{
try {
return field.get(obj);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/*将指定对象变量上此 Field 对象表示的字段设置为指定的新
* */
public void set(Object obj,Object value){
try {
field.set(obj, value);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void domethod(Object obj,Object value){
try {
method.invoke(obj, new Object[]{value});
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static final class Classa{
public String student="";
public int age=0;
Classa(String student,int age){
this.age=age;
this.student=student;
}
public void setStudent(String s){
student=s;
}
public String getstudent(){
return student;
}
}
}