Intellij idea IntelliJ:为名称中带有下划线的字段生成getter/setter
有没有办法让IntelliJ对它生成的getter/setter更聪明?特别是,如果字段名中有下划线,getter能否将其去掉并转换为CamelCase 例如,我希望下面的getter是getCarneAsada():Intellij idea IntelliJ:为名称中带有下划线的字段生成getter/setter,intellij-idea,Intellij Idea,有没有办法让IntelliJ对它生成的getter/setter更聪明?特别是,如果字段名中有下划线,getter能否将其去掉并转换为CamelCase 例如,我希望下面的getter是getCarneAsada(): 我找到了code-Style->Java->code-Generation区域,但没有一个选项是合适的……我不想排除前缀或后缀。它是内部下划线。您可以使用活动模板来完成此操作。它将无法从代码生成中访问,但仍然非常易于使用 我创建了一个具有属性carne_asada的主类: 现在
我找到了
code-Style->Java->code-Generation
区域,但没有一个选项是合适的……我不想排除前缀或后缀。它是内部下划线。您可以使用活动模板来完成此操作。它将无法从代码生成中访问,但仍然非常易于使用
我创建了一个具有属性carne_asada
的主类:
现在在设置中打开Live Templates
,并在other
下创建一个名为getu
的新模板:
按下底部名为Define
的小链接,定义此模板何时有效。然后选择Java | Declaration
:
按按钮编辑变量
打开一个窗口,可以在其中定义每个活动模板变量。现在创建以下变量:
VAR : suggestFirstVariableName("Object")
TYPE : typeOfVariable(VAR)
CAP_CAM_VAR : capitalize(underscoresToCamelCase(VAR))
顺序非常重要,因此VAR
必须放在第一位。在我的示例中,CAP\u CAM\u VAR
代表大写,CamelCase代表VAR
变量。根据图像设置跳过(如果已定义)
:
现在再次按OK
和OK
返回编辑器
通过键入getu
尝试新的getu
实时模板,然后按Tab:
按Enter键,getter生成已完成:
现在,如果您有更多带下划线的变量,您将得到一个列表供您选择,下面是一个示例:
结果非常漂亮:
您可以轻松创建相同的setu
live模板,也可以创建一些同时创建这两个模板的sgetu
希望这有点帮助 以下是在IntelliJ IDEA 2016和Android Studio 2.2下生成getter/setter的模板 骆驼化吸气剂:
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
#if ($StringUtil.startsWithIgnoreCase($name, 'is'))
#set($name = $StringUtil.decapitalize($name))
#else
is##
#end
#else
get##
#end
#set($words = $StringUtil.split($name, "_"))
#set($name = "")
#foreach($word in $words)
#set($name = $name + $StringUtil.capitalize($word))
#end
${name}() {
return $field.name;
}
驼峰塞特:
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($words = $StringUtil.split($name, "_"))
#set($name = "")
#foreach($word in $words)
#set($name = $name + $StringUtil.capitalize($word))
#end
void set$name($field.type $StringUtil.decapitalize($name)) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
如果你想流利地掌握上述知识,请参考我的GITS
您可以(应该?)将字段重命名为
carneAsada
。IntelliJ也会自动重命名它的getter和setter,我不想使用神奇的FieldNamingPolicy.LOWER_CASE_和_下划线这里没有选项告诉IntelliJ IDEA在生成getter/setter时以不同的方式对待下划线,因为这违反了Java命名约定。@CrazyCoder是否有任何愿望列表,人们可以投票选择访问getter/setter模板进行定制?类似于我答案中的实时模板?@maba,是的,请看。感谢您的全面解释!我希望在使用普通的“生成getter/setter”函数时得到它,但它听起来好像@CrazyCoder不认为这是可能的。@Eric不,显然现在还不可能。希望JetBrains能够为代码生成打开模板,以便能够对其进行自定义。仅供参考:对于那些在驼峰大小写字段名称前加下划线(例如,\u fooBar
)的用户,您可以使用大写(下划线驼峰大小写(snakeCase(VAR)))
作为CAP\u CAM\u VAR
的表达式,创建getFooBar()
谢谢!除了camellized Setter中的一个小错误外,代码正常工作。最后一行应该是$field.name=$StringUtil.decapitalize($name)
,以便您设置的字段与函数的参数匹配。
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($words = $StringUtil.split($name, "_"))
#set($name = "")
#foreach($word in $words)
#set($name = $name + $StringUtil.capitalize($word))
#end
void set$name($field.type $StringUtil.decapitalize($name)) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}