IntelliJ自定义getter/setter模板适配下划线开头字段报错如何修复
错误原因
你当前的写法存在两个问题:
- 直接对
$helper.getPropertyName()的返回值链式调用substring(1),没有做前置校验,当返回的字符串长度不足或首字符不是下划线时会直接触发索引越界错误 - 操作对象有误:你需要处理的是原始字段名的前缀下划线,而非
$helper生成后的默认属性名
修复方案
先对原始字段名做下划线前缀判断,仅对符合_fieldName规则的字段做前缀裁剪,再走后续的属性名转换逻辑,完整模板如下:
#if($field.modifierStatic) static ## #end $field.type ## #if($field.recordComponent) ${field.name}## #else #set($rawFieldName = $field.name) ## 仅对下划线开头的字段裁剪前缀 #if($rawFieldName.startsWith("_")) #set($processedFieldName = $rawFieldName.substring(1)) #else #set($processedFieldName = $rawFieldName) #end #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($processedFieldName, $project)))) #if ($field.boolean && $field.primitive) is## #else get## #end ${name}## #end () { return $field.name; }
额外说明
如果你的所有字段都严格遵循_fieldName命名规则,不需要兼容普通命名的字段,可以简化裁剪逻辑,直接写#set($processedFieldName = $field.name.substring(1))即可。
内容的提问来源于stack exchange,提问作者Mostafa Shafi'
相关产品推荐
相关产品推荐

