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; }
关键修改点
- 移除
if块内变量赋值的缩进空格,避免多余空格被带入生成的代码 - 将
get##和${name}##调整为无额外缩进的格式,确保两者直接拼接,不插入空格
验证效果
使用修正后的模板,针对Summary类的i_duration字段,生成的Getter代码符合预期:
public class Summary { public long i_duration; public long getDuration() { return i_duration; } }
内容的提问来源于stack exchange,提问作者nisingh
相关产品推荐
相关产品推荐

