java反射机制简单实例

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反射机制)