• IDEA Getter/Setter 生成方法名不正


    IDEA Getter/Setter 方法名不正

    现象

      IDEA自动生成Getter/Setter方法时,如果字段是布尔值并且以is开头,生成的方法会不带Is
    举个例子:
    现在有一个Human类,有一个布尔类型的isStudent字段

    public class Human {
        private Boolean isStudent;
    }
    

    如果使用IDEA默认模板会生成

    public class Human{
        private Boolean isStudent;
    
        public Boolean getStudent() {
            return isStudent;
        }
    
        public void setStudent(Boolean student) {
            isStudent = student;
        }
    }
    

    但是想要的代码是(方法名不同)

    public class Human{
        private Boolean isStudent;
    
        public Boolean getIsStudent() {
            return isStudent;
        }
    
        public void setIsStudent(Boolean isStudent) {
            this.isStudent = isStudent;
        }
    }
    

    导致的问题就是Get、Set方法名不一致的时候,使用工具类举行属性拷贝时数据丢失。
    如果意识不到这一点会导致意想不到的结果。

    解决办法

    在生成Getter/Setter方法时,创建一个模板

    Getter模板:

    #if($field.modifierStatic)
    static ##
    #end
    $field.type ##
    #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
    #if($field.boolean && $field.name.startsWith("is"))
      getIs##
    #else
      get##
    #end
    ${name}() {
      return $field.name;
    }
    

    Setter模板:

    #set($paramName = $helper.getParamName($field, $project))
    #if($field.modifierStatic)
    static ##
    #end
    void set##
    #if($field.boolean && $field.name.startsWith("is"))
    Is##
    #set($paramName = $field.name)
    #end
    $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
    #if ($field.name == $paramName)
        #if (!$field.modifierStatic)
        this.##
        #else
            $classname.##
        #end
    #end
    $field.name = $paramName;
    }
    

    选择这个模板时,生成的方法就会是第二种方案。


    后记:
      阿里规范中有规定,布尔值不要以is开头。

    反例:定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted(),框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到,进而抛出异常。

    不过,isDeleted属性的方法如果是getIsDeleted()应该是没有问题的。

  • 相关阅读:
    matlab colormap
    张量的基本概念
    河南省测绘资质单位大全
    Meanshift算法
    图形图像的绘制 GandyDraw
    leetcode
    Java 实现装饰(Decorator)模式
    Python
    Asp.Net+Easyui实现重大CRUD
    Scriptcase演示程序,现在,他们使用SC多么简单的开发系统
  • 原文地址:https://www.cnblogs.com/lixin-link/p/13731771.html
Copyright © 2020-2023  润新知