Apache Commons BeanUtils包学习 3 -ConstructorUtils invokeConstr

               

 

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);  
         
   }  
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值