有没有办法让IntelliJ更聪明地生成它的getter / setter?特别是,如果字段名称中包含下划线,那么getter是否可以将它们剥离并转换为CamelCase?
例如,我希望下面的getter是getCarneAsada():
public class Taco {
private String carne_asada;
public String getCarne_asada() {
return carne_asada;
}
}
我找到了Code Style->Java->Code Generation
区域,但没有一个选项看起来合适......它不是我要排除的前缀或后缀。它是内心的下划线。
答案 0 :(得分:13)
您可以使用实时模板来完成此操作。它不能从代码生成中访问,但它仍然很容易使用。
我创建了一个包含属性carne_asada
的Main类:
现在在设置中打开Live Templates
并在getu
下创建一个名为other
的新模板:
按下底部名为Define
的小链接,以定义此模板何时有效。然后选择Java | Declaration
:
按下按钮Edit Variables
打开一个窗口,可以在其中定义每个实时模板变量。现在创建以下变量:
VAR : suggestFirstVariableName("Object")
TYPE : typeOfVariable(VAR)
CAP_CAM_VAR : capitalize(underscoresToCamelCase(VAR))
订单非常重要,因此VAR
必须先行。在我的示例中,CAP_CAM_VAR
代表Capitalize和CamelCase VAR
变量。根据图片设置Skip if defined
:
现在再次按OK
和OK
返回编辑器。
点击getu
,然后按标签,尝试使用新的getu
实时模板:
按 Enter ,getter生成完成:
现在,如果您有更多带下划线的变量,您将获得一个可供选择的列表,所以这是一个例子:
结果很美:
您可以轻松创建相同的setu
实时模板,也可以创建一些同时创建它们的sgetu
。
希望这有点帮助!
答案 1 :(得分:4)
以下是用于生成在IntelliJ IDEA 2016和Android Studio 2.2下工作的getter / setter的模板。
Camelized Getter:
#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;
}
Camelized Setter:
#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;
}
如果你想要一个流利的getter / setter,请参考我的要点。
https://gist.github.com/k24/72d0be3d76d4eb987c6d4eb1d8f42db2