java 反射

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;
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值