A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-2-25 18:08  /  1596 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下
  1. import java.beans.IntrospectionException;
  2. import java.beans.PropertyDescriptor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;

  5. public class IntroDemo {

  6.        
  7.         public static void main(String[] args) throws Exception{
  8.                 // TODO Auto-generated method stub
  9.                 Reflectpot rfp1 = new Reflectpot(3,5);
  10.                 //这里获得x的属性 直接是获取不到的 我们可以先定义属性名
  11.                 String proName ="x";
  12.                 // 这里有个思路是 x ---X 看第二个是否小写 转换完之后---getX---通过反射的方式method getX
  13.                 //这里引入javaBean的一个类是 PropertyDescriptor 属性描述
  14.                 PropertyDescriptor pd = new PropertyDescriptor(proName,rfp1.getClass());
  15.                 //得到javaBean的属性 我们就能得到javaBean的get 和set方法
  16.                 Method getX =  pd.getReadMethod();//得到X的属性的读方法
  17. //                有了这个方法 我们就可以用invoke在对象身上调用
  18.                 Object  renVal =         getX.invoke(rfp1);
  19.                 System.out.println(renVal);//取出值
  20.                 Method setX =  pd.getWriteMethod();//得到X的属性的写方法
  21. //                有了这个方法 我们就可以用invoke在对象身上调用
  22.                 setX.invoke(rfp1,7);//这里就不需要返回值
  23.                 System.out.println(rfp1.getX());//打印我们刚才修改的
  24.         }

  25. }
  26. class Reflectpot{//创建一个类 生成set和getX Y方法
  27. public int getX() {
  28.                 return x;
  29.         }
  30.         public void setX(int x) {
  31.                 this.x = x;
  32.         }
  33.         public int getY() {
  34.                 return y;
  35.         }
  36.         public void setY(int y) {
  37.                 this.y = y;
  38.         }
  39. private int x;
  40. public int y;
  41. public String s1 ="ball";//新加两个成员变量
  42. public String s2 ="car";
  43. Reflectpot(int x ,int y){
  44. super();
  45. this.x=x;
  46. this.y=y;

  47.                 }
  48. public String toString(){
  49.        
  50.         return s1+"::"+s2;
  51.         }

  52. }
复制代码

上面代码虽然比较嘈杂 但是有用的并不多 我想要做的是让eclipse自动抽取方法
比如 我抽取javaBean内省的getX
选中
  1. PropertyDescriptor pd = new PropertyDescriptor(proName,rfp1.getClass());
  2.                 //得到javaBean的属性 我们就能得到javaBean的get 和set方法
  3.                 Method getX =  pd.getReadMethod();//得到X的属性的读方法
  4. //                有了这个方法 我们就可以用invoke在对象身上调用
  5.                 Object  renVal =         getX.invoke(rfp1);
复制代码
这三段代码之后 我找着张老师的视频 右键 重构 方法抽取 结果却提示

这到底是怎么回事呢


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 安辉林 于 2014-2-25 23:40 编辑

选中你要提取的代码,然后Shift+Alt+M,输入方法名就可以了,错误提示应该是你的局部变量赋值不明确,主要错误出现在第16行。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
安辉林 发表于 2014-2-25 23:28
选中你要提取的代码,然后Shift+Alt+M,输入方法名就可以了,错误提示应该是你的局部变量赋值不明确,主要错 ...

  我今天又试了下 把  Object  renVal = 前面这个删掉就可以抽取了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马