本帖最后由 小马过河 于 2013-12-28 23:24 编辑
程序注释的部分都没有问题,问题就出在最下面第三种方式上面了~~~~~~~~各种没辙。
报错如下:Exception in thread "main" java.lang.NoSuchMethodException: Property 'age' has no getter method in class 'class 练习javaBean.Student
代码如下:大神帮忙看看吧
- package 练习javaBean;
- import java.beans.BeanInfo;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.lang.reflect.Method;
- import java.util.Date;
- import org.apache.commons.beanutils.BeanUtils;
- /**
- * JavaBean练习,对Student的属性进行操作
- * 步骤: 1创建类的对象。
- * 2通过属性描述符这个类指明JavaBean类,传入我们要拿到的属性。
- * 3通过反射得到对应的方法
- * 4调用
- *
- *
- */
- public class BeanTest {
- public static void main(String[] args) throws Exception {
- String propertyName="age"; //要做改变的属性。
- String propertyName2="name";
- Student sd = new Student(25,"苍老师"); //创建对象
-
- // PropertyDescriptor pd = new PropertyDescriptor(propertyName,sd.getClass());
- // PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2,sd.getClass());
- // //属性描述符,根据对字节码文件和属性名进行说明得到具体属性。
- // Object retVal=24;
- // Method methodSetAge=pd.getWriteMethod(); //反射得到这个属性的设置方法。
- // methodSetAge.invoke(sd, retVal); //更改这个属性的值
- //
- // Method methodGetAge=pd.getReadMethod(); //反射得到这个属性的获取方法。
- // System.out.println(methodGetAge.invoke(sd)); //因为是get方法,所以没有其他参数。
- //
- // //第二种方式,得到名称。
- // BeanInfo bf = Introspector.getBeanInfo(sd.getClass()); //BeanInfo是接口,通过IntorSpector类了解所有的属性,公开方法和事件。
- // PropertyDescriptor[] pds=bf.getPropertyDescriptors(); //将所有的属性罗列成一个数组
- // Object obj="苍井空";
- // for (PropertyDescriptor pdt : pds) {
- // if (pdt.getName().equals(propertyName2)) {
- // Method methodSetName = pd2.getWriteMethod();
- // methodSetName.invoke(sd, obj);
- // Method methodGetName = pd2.getReadMethod();
- // System.out.println(methodGetName.invoke(sd));
- // break;
- // }
- // }
-
- //第三种方式
-
- System.out.println(BeanUtils.getProperty(sd, propertyName));
-
- BeanUtils.setProperty(sd, propertyName, "9");
- System.out.println(sd.getAge());
-
-
-
- }
- }
复制代码 类也写了,自动生成不会有问题啊;
- package 练习javaBean;
- import java.util.Date;
- public class Student {
- private int age;
- private String name;
- private Date birthday;
- public Student(){}
- public Student(int age,String name){
- this.age=age;
- this.name=name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
-
- }
复制代码 个位大神帮忙看看啊~~~~~~~~~~~~~~~~~~~~
{:soso__4543169153280382615_7:}
|