黑马程序员技术交流社区

标题: 用内省是出现IntrospectionException ,求解决 [打印本页]

作者: 万马奔腾    时间: 2014-5-31 18:19
标题: 用内省是出现IntrospectionException ,求解决
本帖最后由 万马奔腾 于 2014-6-2 18:35 编辑

定义的User类如下:
public class User {
        
        private String name;

        public User(String name) {
                super();
                this.name = name;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }
}

用内省操作代码如下:

import java.beans.*;
import java.lang.reflect.Method;

public class IntrospectorTest {

        public static void main(String[] args) throws Exception {
               
                User user = new User("zhangsan");
                String uName = "lisi";
                setProperty(user,uName);
        }

        private static void setProperty(User user, String uName) throws Exception {
                        PropertyDescriptor pd = new PropertyDescriptor(uName,User.class);
                        Method methodSetUname = pd.getWriteMethod();
                        methodSetUname.invoke(user, uName);
                        System.out.println(user.getName());
        }

}

出现错误如下:
Exception in thread "main" java.beans.IntrospectionException: Method not found: isLisi
        at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:106)
        at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
        at techAct5.IntrospectorTest.setProperty(IntrospectorTest.java:32)
        at techAct5.IntrospectorTest.main(IntrospectorTest.java:19)

求指导

作者: 万马奔腾    时间: 2014-5-31 18:58
已解决


public static void main(String[] args) throws Exception {
               
                User user = new User("zhangsan");
                String uName = "lisi";
                setProperty(user,uName);
}
中的String uName = "lisi";改为String uName = "name";

然后将  methodSetUname.invoke(user, uName);修改为methodSetUname.invoke(user, "lisi");

麻烦大家了 非常感谢!
作者: 田富丰    时间: 2014-5-31 18:58
  1.         public static void main(String[] args) throws Exception {

  2.                 User user = new User();
  3.                 String uName = "lisi";
  4.                 setProperty(user, uName);
  5.         }

  6.         private static void setProperty(User user, String uName) throws Exception {
  7.                 PropertyDescriptor pd = new PropertyDescriptor("name", user.getClass());//你这传参有误,那个String类型的参数是,User的一个属性,你那个是设置name属性的值!!
  8.                 Method methodSetUname = pd.getWriteMethod();
  9.                 methodSetUname.invoke(user, uName);
  10.                 System.out.println(user.getName());
  11.        
  12.         }
复制代码

希望对你有帮助!!
作者: 万马奔腾    时间: 2014-6-2 18:34
田富丰 发表于 2014-5-31 18:58
希望对你有帮助!!

非常谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2