【发布时间】:2016-06-02 11:50:19
【问题描述】:
我正在尝试使用 Intelij 模板编写自定义设置器,但用于 Google 的 Guava Optionals。例如,如果我有一个类如下:
public class Note {
public Optional<String> title;
}
在 Android Studio 输出中使用默认的 Setter 生成:
public class Note {
public Optional<String> title;
public void setTitle(Optional<String> title) {
this.title = title;
}
}
我想要实现的是:
public class Note {
public Optional<String> title;
public void setTitle(String title) {
this.title = Optional.fromNullable(title);
}
}
到目前为止,我尝试的是复制 Intelij 的模板并使用 StringUtil.split() 去除方法签名的 Optional< 部分。但是,我在使用下面的模板时遇到了错误。
错误
Incorrect method 'public void setTitle($StringUtil.split($field.type, true, "<").get(1) title) { mTitle = title; }
对我应该做什么有什么建议吗?
默认Intelij Default Setter 生成模板
#set($paramName = $helper.getParamName($field, $project))
public ##
#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)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
我的自定义 Guava Optional Setter Generation
#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($StringUtil.split($field.type, true, "<").get(1) $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
【问题讨论】:
-
你能告诉我你收到了什么错误吗?
-
@thst 我已经更新了上面的帖子。具体来说,该方法永远不会生成,并显示一个带有以下内容的红色气泡:
Incorrect method 'public void setTitle($StringUtil.split($field.type, true, "<").get(1) title) { mTitle = title; } -
你在哪里找到 $StringUtil?它没有记录在案。您可以使用 groovy 代码来完成字符串操作。但是没有样本。
-
是的,我不太确定在哪里可以找到任何字符串操作的文档。我快速搜索了
jetbrain StringUtil capitalizeWithJavaBeanConvention,发现了这个:javadoc.jetbrains.net/teamcity/openapi/8.0/jetbrains/… ...在那里你可以找到StringUtil.split()的签名
标签: java android templates intellij-idea guava