关于属性命名你应该注意的点

简介: 关于属性命名你应该注意的点

对于bean的属性想必大家都很熟悉,一般都是通过get、set方法进行封装,然后暴露给外界调用。但是在给属性命名时还是除去命名规范有两点需要注意的,以下两点在前端传值的时候会特别容易出错

1、Boolean 类型的字段不能以is开头

Boolean 类型在生成get和set方法时和别的类型不太一样,Boolean的get方法是isXXX、或getXXX或者把is去掉getXXX,在生成set方法时会把变量名前的is去掉,然后在生成setXXX方法,比如isDeleted字段,get方法就是IsDeleted或者getIsDeleted、或者getDeleted,而set方法是setIsDeleted或者setDeleted。


2、属性名称首字母不能大写

在生成get和set方法时就是把首字母大写,然后加上get和set,也就是说get和set后面的字段才是真正的属性,这样前端传来的值也很可能接收不到。


下面通过反射来说明get和set后面的字段才是真正的属性

UserEntity.java

//@Data
public class UserEntity {
    private Boolean isDeleted;
    private String Username;
    private String password;
    public Boolean getDeleted() {
        return isDeleted;
    }
    public void setDeleted(Boolean deleted) {
        isDeleted = deleted;
    }
    public String getUsername() {
        return Username;
    }
    public void setUsername(String username) {
        Username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

get、set方法是通过idea生成的

PropertyTest.java

public class PropertyTest {
    public static void main(String[] args) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
        UserEntity userEntity1 = new UserEntity();
        Class<? extends UserEntity> aClass = userEntity1.getClass();
        BeanInfo beanInfo = Introspector.getBeanInfo(aClass);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            if (propertyDescriptor != null) {
                String displayName = propertyDescriptor.getDisplayName(); // 属性名称
                if (!"class".equals(displayName)) {
                    Method readMethod = propertyDescriptor.getReadMethod();  // get 方法
                    Method writeMethod = propertyDescriptor.getWriteMethod(); // set方法
                    System.out.println("属性名:"+displayName);
                    if (readMethod != null) {
                        System.out.println("get方法:"+ readMethod.getName()+","+readMethod.invoke(userEntity1));
                    }
                    if (writeMethod != null) {
                        System.out.println("set方法="+writeMethod.getName());
                    }
                }
            }
        }
    }
}

结果:

属性名:deleted
get方法:getDeleted
set方法=setDeleted
属性名:password
get方法:getPassword
set方法=setPassword
属性名:username
get方法:getUsername
set方法=setUsername

结果是不是UserEntity里面的属性不一样,在UserEntity里deleted是isDeleted,username是Username。所以说get和set方法之后的才是真正的属性,get和方法生成的规则不一样,前端传值过来的时候就有很大可能接收不到值,所以属性命名的时候要特别注意。


PropertyDescriptor 是一个属性描述器,可以获取一个bean的属性、读方法和写方法。


能力有限,水平一般,如有错误,请多指出。


目录
相关文章
|
JSON 自然语言处理 JavaScript
介绍16个让你的代码变漂亮的属性
介绍16个让你的代码变漂亮的属性
317 0
介绍16个让你的代码变漂亮的属性
|
2月前
|
JavaScript 前端开发 开发者
|
3月前
|
JavaScript 前端开发
avaScript基础知识-对象的属性名和属性值
关于JavaScript对象的属性名和属性值的基础知识介绍。
23 2
avaScript基础知识-对象的属性名和属性值
|
4月前
|
机器学习/深度学习 自然语言处理 算法
命名实体消歧
8月更文挑战第23天
|
5月前
|
安全 编译器 C++
C++一分钟之-C++中的属性命名空间
【7月更文挑战第22天】C++11引入属性作为元数据,虽无内置属性命名空间,但可通过自定义属性与命名空间组合实现类似效果。例如,创建`perf`命名空间存放`slow`和`fast`属性来标记函数性能。正确使用属性需注意位置、避免重复和确保与实现一致,以提升代码可读性和编译器理解。通过模拟属性命名空间,可以更有效地管理和使用属性。
49 1
|
程序员 开发者 Python
命名难,难于上青天
命名难,难于上青天
97 0
lodash创建一个函数属性名称的数组,包含继承属性
lodash创建一个函数属性名称的数组,包含继承属性
89 0
CTreeView不是类名或结构名
CTreeView不是类名或结构名
208 0
|
JavaScript 开发者
路由-关于命名视图的名称到底是变量还是字符串的说明|学习笔记
快速学习路由-关于命名视图的名称到底是变量还是字符串的说明
接口的讲解-强制约束-可选属性-任意多个属性-只读属性
接口的讲解-强制约束-可选属性-任意多个属性-只读属性