You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ自定义Getter模板:移除字段前缀生成规范方法名

解决IntelliJ自定义Getter模板的空格问题(处理带前缀字段)

需求是在IntelliJ中编写自定义Getter模板,当字段名以i_开头时,自动截取前缀后生成符合规范的Getter方法名。例如字段i_duration要生成getDuration(),而非默认的getI_duration()。

当前自定义模板生成代码时出现错误:

Incorrect method 'long get Duration() { return i_duration; }'

可见get与Duration之间多了一个空格,原始自定义模板如下:

#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($fieldName = $field.name)
#set($rejectPrefix = "i_")
#if ($StringUtil.startsWith(${fieldName}, ${rejectPrefix}))
    #set($fieldName = $StringUtil.substringAfter(${fieldName}, ${rejectPrefix}))
#end    
#if($field.recordComponent)
    ${fieldName}##
#else
    #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier(${fieldName})))
    #if ($field.boolean && $field.primitive)
    is##
    #else
    get##
    #end
    ${name}##
#end
() {
return $field.name;
}

错误原因

Velocity模板会保留代码中的缩进空格,get##所在行的缩进空格会被输出到get和${name}之间,导致方法名出现空格。

修正后的模板

#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($fieldName = $field.name)
#set($rejectPrefix = "i_")
#if ($StringUtil.startsWith($fieldName, $rejectPrefix))
#set($fieldName = $StringUtil.substringAfter($fieldName, $rejectPrefix))
#end    
#if($field.recordComponent)
${fieldName}##
#else
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($fieldName)))
#if ($field.boolean && $field.primitive)
is##
#else
get##
#end
${name}##
#end
() {
return $field.name;
}

关键修改点

  1. 移除if块内变量赋值的缩进空格,避免多余空格被带入生成的代码
  2. 将get##和${name}##调整为无额外缩进的格式,确保两者直接拼接,不插入空格

验证效果

使用修正后的模板,针对Summary类的i_duration字段,生成的Getter代码符合预期:

public class Summary {
    public long i_duration;

    public long getDuration() {
        return i_duration;
    }
}

内容的提问来源于stack exchange,提问作者nisingh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:36:06