ConstructorUtils 使用

1.ConstructorUtils 
这个类中的方法主要分成两种,一种是得到构造方法,一种是创建对象。事实上多数时候得到构造方法的目的就是创建对象,这里只介绍一下创建对象。
static java.lang.Object ConstructorUtils.invokeConstructor(java.lang.Class klass, java.lang.Object[] args) 
//根据一个java.lang.Class以及相应的构造方法的参数,创建一个对象。
 Object obj=ConstructorUtils.invokeConstructor(Month.class, {new Integer(1), "Jan"});
 Month month=(Month)obj;
 try {
   System.out.println(BeanUtils.getProperty(month,"value"));
 } catch (Exception e) {
   e.printStackTrace();
 }
输出证明,构造方法的调用是成功的。
如果需要强制指定构造方法的参数类型,可以这样调用:
   Object[] args={new Integer(1), "Jan"};
   Class[] argsType={int.class, String.class};
   Object obj;
   obj = ConstructorUtils.invokeExactConstructor(Month.class, args, argsType);
   Month month=(Month)obj;
   System.out.println(BeanUtils.getProperty(month,"value"));
argsType指定了参数的类型。
 
ConstructorUtils补遗
创建对象还有一个方法:invokeExactConstructor,该方法对参数要求
更加严格,传递进去的参数必须严格符合构造方法的参数列表。
例如:
Object[] args={new Integer(1), "Jan"};
Class[] argsType={int.class, String.class};
Object obj;
//下面这句调用将不会成功,因为args[0]的类型为Integer,而不是int
//obj = ConstructorUtils.invokeExactConstructor(Month.class, args);

//这一句就可以,因为argsType指定了类型。
obj = ConstructorUtils.invokeExactConstructor(Month.class, args, argsType);
Month month=(Month)obj;
System.out.println(BeanUtils.getProperty(month,"value"));
2.MethodUtils
    Entity entity =  new  Entity();  
    PropertyUtils.setProperty(entity,  "name"    "心梦帆影"  );
    
     //通过MethodUtils的invokeMethod方法,执行指定的entity中的方法(无参的情况)   
   System.out.println( MethodUtils.invokeMethod(entity,  "haha" ,  null ) ); 

     //通过MethodUtils的invokeMethod方法,执行指定的entity中的方法(1参的情况)          
    MethodUtils.invokeMethod(entity,  "sayHelle" ,  "心梦帆影" );  
3.例子
public class TestPropertyUtils {   
       
    public static void main(String[] args) throws Exception{   
          
        Entity entity = new Entity();   
           
        //通过PropertyUtils的getProperty方法获取指定属性的值   
        Integer id = (Integer)PropertyUtils.getProperty(entity, "id");   
        String name = (String)PropertyUtils.getProperty(entity, "name");   
        System.out.println("id = " + id + "  name = " + name);   
           
        //调用PropertyUtils的setProperty方法设置entity的指定属性   
        PropertyUtils.setProperty(entity, "name", "心梦帆影");   
        System.out.println("name = " + entity.getName());   
           
        //通过PropertyUtils的describe方法把entity的所有属性与属性值封装进Map中   
        Map map = PropertyUtils.describe(entity);   
        System.out.println("id = " + map.get("id") + "  name = " + map.get("name"));   
           
        //通过MethodUtils的invokeMethod方法,执行指定的entity中的方法(无参的情况)   
        System.out.println( MethodUtils.invokeMethod(entity, "haha", null) );   
           
        //通过MethodUtils的invokeMethod方法,执行指定的entity中的方法(1参的情况)   
       MethodUtils.invokeMethod(entity, "sayHelle", "心梦帆影");   
           
        //通过MethodUtils的invokeMethod方法,执行指定的entity中的方法(多参的情况)   
        Object[] params = new Object[]{new Integer(10),new Integer(12)};   
        String msg = (String)MethodUtils.invokeMethod(entity, "countAges", params);   
       System.out.println(msg);   
          
   }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值