如何让IntelliJ自定义Getter模板仅作用于集合类型字段
解决方法
要让自定义Getter模板仅应用于集合类型字段,只需在模板最外层添加类型判断逻辑,只对Java集合框架中的字段生成带空值处理的Getter,非集合字段则使用默认Getter逻辑。
修改后的完整模板
#if ($field.type.canonicalName.startsWith("java.util.Collection") || $field.type.canonicalName.startsWith("java.util.List") || $field.type.canonicalName.startsWith("java.util.Set")) #if($field.modifierStatic) static ## #end $field.type ## #if($field.recordComponent) ${field.name}## #else #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))) #if ($field.boolean && $field.primitive) is## #else get## #end ${name}## #end () { if (this.$field.name == null) return Collections.emptyList(); return $field.name; } #else ## 非集合类型字段使用默认Getter逻辑 #if($field.modifierStatic) static ## #end $field.type ## #if($field.recordComponent) ${field.name}## #else #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))) #if ($field.boolean && $field.primitive) is## #else get## #end ${name}## #end () { return $field.name; } #end
关键说明
- 类型判断逻辑:通过
$field.type.canonicalName获取字段的全限定类名,判断是否属于java.util.Collection、java.util.List或java.util.Set家族的类型,满足条件才触发自定义空值处理逻辑。 - 扩展集合类型:如果需要支持Queue、Deque等其他集合类型,只需在
#if条件中追加对应的判断,比如$field.type.canonicalName.startsWith("java.util.Queue")。 - 非集合字段处理:
else块中保留了常规Getter的生成逻辑,确保普通字段仍生成标准Getter;若你的IDE支持,也可以清空else块内容,让IDE自动使用内置默认模板。
内容的提问来源于stack exchange,提问作者logbasex
相关产品推荐
相关产品推荐

