zoukankan      html  css  js  c++  java
  • 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()应该是没有问题的。

  • 相关阅读:
    jQuery标签操作
    Bootstrap和Font Awesome
    jQuery拾遗
    Bootstrap笔记
    软件测试
    Day01 第一个Python程序
    cd指令
    ls命令
    type命令
    每天一个Linux指令
  • 原文地址:https://www.cnblogs.com/lixin-link/p/13731771.html
Copyright © 2011-2022 走看看