记录java DO对象 set方法与is方法坑

记录java DO对象 set方法与is方法坑!!!

背景介绍

一个普通的DO对象,一般有对应的set和get方法,如下面的Student类:

public class Student {
    protected String age;
    protected String name;
    protected String height;

    public String getAge() {
        return age;
    }


    public void setAge(String age) {
        this.age = age;
    }


    public String getName() {
        return name;
    }


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

}

故障重现

若在Student类中,添加了对应的属性方法,如isAge():

完整代码如下:

```java

public class Student {

protected String age;

protected String name;

protected String height;

public String getAge() {
    return age;
}

public boolean isAge() {
    return StringUtil.equalsIgnoreCase(age, "20");
}

public void setAge(String age) {
    this.age = age;
}


public String getName() {
    return name;
}


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

}

# 原因分析
程序编译时出现的错误如下:
This breaks the JavaBeans specification and can cause unpredictable results.

legal overloaded getter method with ambiguous type for property age in class Student

因为isAge相当于getAge,导致JavaBean里面有两个getAge方法,违反了JavaBean的规范,需要干掉一个。

同时,也会带来另外一个问题,如使用:BeanUtils.describe方法转为map对象数据时候,会发现即使你在student对象传了String,  出来之后变成了boolean类型,有兴趣的读者可以自己试试。

```java
         Student student = new Student();
            student.setAge("12");
            student.setName("hh");
Map studentMap = BeanUtils.describe(student);

studentMap 中 age 是 true/ false 。。

说明了 isAge()方法的优先级比 getAge()方法高。

你可能感兴趣的:(java,servlet,开发语言)