懒惰是人类文明前进的真正动力,在我们的日常开发中,我们要善于发掘能提高自己效率的工具,让自己有更多的学习时间。编辑Template是我在使用databinding时无意中点进去发现的。关于这方面的资料少之又少,也没有明确的说明,那我就来做一个比较全面的总结吧。
以前写JAVA的model或者写Entity类时,总是要写注释,内容多的时候需要一个一个修改,很麻烦,有浪费时间,如下图
所以我们不应该每天花那么多时间去做这种重复而又低效率的事情,所以,我们就~自动生成注释吧。
IntelliJ IDEA和Android Studio的使用方式都是一样的。我的快捷键Alt+Insert,弹出如下图的页面,可以选择Getter或Setter或Getter and Setter打开面板。
打开面板后会见到如下图所示
打开之后选择默认的get set,看看他们写的源码
从图中可以看到,开头会先判断一下是否为静态对象。
这个是if else的书写格式,结尾需要加上end
#if ()
##
#else
##
#end
语句书写前需要以#开头
调用field的方法需要以$开头,field里面有各种方法提供调用,每一个参数可以通过$field输出一些信息,然后查看里面所带的属性
输入之后如下图所示
AbstractElement {
name = 'test对象名称', isArray = false, isPrimitiveArray = false, isObjectArray = false, isStringArray = false, isCollection = false, isMap = false, isSet = false, isList = false, isPrimitive = true, isString = false, isNumeric = true, isObject = false, isDate = false, isCalendar = false, i
sBoolean = false, isLong = false, isFloat = false, isDouble = false, isVoid = false, isChar = false, isByte = false, isShort = false, typeName = 'null', type = 'int', typeQualifiedName = 'null', isModifierStatic = false, isModifierPublic = false, isModifierProtected = false, isModifierPackageLocal = false, isModifierPrivate = true, isModifierFinal = false
} :::FieldElement {
isConstant = false, isEnum = false, isModifierTransient = false, isModifierVolatile = false
}
这个输出直接反映出这个对象的所有属性。判断语句需要#开头,属性调用需要$开头。
然后再根据自己的需求写一些逻辑判断,给大家参考一下我写的。储存String的的方式。
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
is##
#else
get##
#end
${name}() {
$field
#if ($field.boolean && $field.primitive||$field.int)
return SharedCache.getBoolean(context, "$field.name");
#else
if (MyUtils.isNullOrEmpty($field.name)) {
$field.name = SharedCache.getString(context, "$field.name");
return $field.name;
} else {
return $field.name;
}
#end
}
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
##
#else
##
#end
#end
SharedCache.add(context,"$field.name",$paramName);
#if ($field.boolean && $field.primitive)
this.$field.name = $field.name;
#else
this.$field.name = null;
#end
}
判断是否为int 类型:$field.numeric
判断是否为void 类型:$field.void
详细具体看下文。
AbstractElement { name = 'crashHandlerSwitch', isArray = false, isPrimitiveArray = false, isObjectArray = false, isStringArray = false, isCollection = false, isMap = false, isSet = false, isList = false, isPrimitive = true, isString = false, isNumeric = true, isObject = false, isDate = false, isCalendar = false, isBoolean = false, isLong = false, isFloat = false, isDouble = false, isVoid = false, isChar = false, isByte = false, isShort = false, typeName = 'null', type = 'int', typeQualifiedName = 'null', isModifierStatic = false, isModifierPublic = false, isModifierProtected = false, isModifierPackageLocal = false, isModifierPrivate = true, isModifierFinal = false } :::FieldElement { isConstant = false, isEnum = false, isModifierTransient = false, isModifierVolatile = false }
基本上翻译一下就知道每一个true和false是什么意思,需要用到哪个就是用那个函数,调用的时候不需要书写格式不需要写is,并且开头是小写。