代码如下- import java.beans.IntrospectionException;
- import java.beans.PropertyDescriptor;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- public class IntroDemo {
-
- public static void main(String[] args) throws Exception{
- // TODO Auto-generated method stub
- Reflectpot rfp1 = new Reflectpot(3,5);
- //这里获得x的属性 直接是获取不到的 我们可以先定义属性名
- String proName ="x";
- // 这里有个思路是 x ---X 看第二个是否小写 转换完之后---getX---通过反射的方式method getX
- //这里引入javaBean的一个类是 PropertyDescriptor 属性描述
- PropertyDescriptor pd = new PropertyDescriptor(proName,rfp1.getClass());
- //得到javaBean的属性 我们就能得到javaBean的get 和set方法
- Method getX = pd.getReadMethod();//得到X的属性的读方法
- // 有了这个方法 我们就可以用invoke在对象身上调用
- Object renVal = getX.invoke(rfp1);
- System.out.println(renVal);//取出值
- Method setX = pd.getWriteMethod();//得到X的属性的写方法
- // 有了这个方法 我们就可以用invoke在对象身上调用
- setX.invoke(rfp1,7);//这里就不需要返回值
- System.out.println(rfp1.getX());//打印我们刚才修改的
- }
- }
- class Reflectpot{//创建一个类 生成set和getX Y方法
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- private int x;
- public int y;
- public String s1 ="ball";//新加两个成员变量
- public String s2 ="car";
- Reflectpot(int x ,int y){
- super();
- this.x=x;
- this.y=y;
- }
- public String toString(){
-
- return s1+"::"+s2;
- }
- }
复制代码
上面代码虽然比较嘈杂 但是有用的并不多 我想要做的是让eclipse自动抽取方法
比如 我抽取javaBean内省的getX
选中
- PropertyDescriptor pd = new PropertyDescriptor(proName,rfp1.getClass());
- //得到javaBean的属性 我们就能得到javaBean的get 和set方法
- Method getX = pd.getReadMethod();//得到X的属性的读方法
- // 有了这个方法 我们就可以用invoke在对象身上调用
- Object renVal = getX.invoke(rfp1);
复制代码 这三段代码之后 我找着张老师的视频 右键 重构 方法抽取 结果却提示
这到底是怎么回事呢
|