当前位置:首页 > 开发 > 编程语言 > Java > 正文

java反射机制简单实例

发表于: 2015-04-08   作者:永夜-极光   来源:转载   浏览:
摘要: 1.问题: 如果遇到这样的情况,怎么解决 遍历一个数组,每当匹配到一个参数XXX,都要使用相应的c.setXXX()方法,如果参数一多,人工敲代码肯定很麻烦,你会怎么办? for(String nodename:ThirdNode) { if(c.getNodeName().equals("title")) x.setTitle((c.getText

1.问题:

如果遇到这样的情况,怎么解决

遍历一个数组,每当匹配到一个参数XXX,都要使用相应的c.setXXX()方法,如果参数一多,人工敲代码肯定很麻烦,你会怎么办?

for(String nodename:ThirdNode)
					
{
 if(c.getNodeName().equals("title"))  x.setTitle((c.getTextContent()));   

 if(c.getNodeName().equals("price"))  x.setPrice((c.getTextContent()));   
 
if(c.getNodeName().equals("author"))  x.setAuthor((c.getTextContent()));               

		
}

 

2.解决方法:反射

以price属性为例:

2.1.得到属性名price,就是nodename

2.2得到方法名setPrice,将price拆分成p 和rice,将p变成大写P 然后P和rice得到Price,再用StringBuilder加上前缀set,最终得到属性名setPrice

2.3调用对应对象c的setPrice方法()

 

代码如下,测试通过.

for(String nodename:ThirdNode) 


      if(c.getNodeName().equals(nodename))  //nodename就是要匹配的属性,可能有很多个
      {
        String s1=nodename.substring(0, 1);     //先得到nodename属性的第一个字符,目的是变成大写
        String s2=nodename.substring(1);         //得到后半部分子串
        StringBuilder str=new StringBuilder("");  //创建StringBuilder对象
        str=str.append("set").append(s1.toUpperCase()).append(s2);//set+s1+s2得到方法名,注意变大写
        String string=str.toString();                      //结果是setxxx,目的是得到对应的方法名,执行该方法
 
        Method[] a=x.getClass().getMethods();   //得到对象x的所有方法,因为x中有setXXX()方法

        for(Method method:a)                             //在所有方法中找到匹配的setXXX()方法
        {
         if(method.getName().equals(string))
        method.invoke(x,c.getTextContent());       //执行x对象的method方法,参数是c.getTextContent() 

        //这行代码类似于x.setXXX(c.getTextContent())     

      }
      }
     }

java反射机制简单实例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号