Java 如何创建用于Guava';这是可选的
我试图编写一个自定义设置使用Intelij模板的,但谷歌的番石榴选项。例如,如果我有一个类,如下所示:Java 如何创建用于Guava';这是可选的,java,android,templates,intellij-idea,guava,Java,Android,Templates,Intellij Idea,Guava,我试图编写一个自定义设置使用Intelij模板的,但谷歌的番石榴选项。例如,如果我有一个类,如下所示: public class Note { public Optional<String> title; } 我想要实现的是: public class Note { public Optional<String> title; public void setTitle(String title) { this.title = O
public class Note {
public Optional<String> title;
}
我想要实现的是:
public class Note {
public Optional<String> title;
public void setTitle(String title) {
this.title = Optional.fromNullable(title);
}
}
我该怎么做有什么建议吗
默认值Intelij默认值
用于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;
}
#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;
}
我的自定义番石榴可选设置生成
#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;
}
#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;
}
#set($paramName=$helper.getParamName($field,$project))
公开的##
#如果($field.modifierStatic)
静止的##
#结束
无效集$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field,$project)))($StringUtil.split($field.type,true,“在搜索之后,我发现,split()
中的签名与上面发布的签名不同
我能够在下面编写一个完整的解决方案,为番石榴Optionals创建一个setter。它非常脆弱,因为我不熟悉IntelliJ中的模板,因为它依赖于包名com.google.common.base.Optional
,也依赖于似乎没有正式文档记录的
它首先检查$paramName
是否是包装的可选设置
。如果是,请使用Guava可选设置完成setter。否则,返回默认IntelliJ setter
#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
static ##
#end
#if($StringUtil.split($field.type, "<").get(0).equals("com.google.common.base.Optional"))
#set($paramSignature = $StringUtil.trimEnd($StringUtil.substringAfter($field.type, "<"), ">"))
#set($fieldAssignment = "Optional.fromNullable(" + $paramName + ")")
#else
#set($paramSignature = $field.type)
#set($fieldAssignment = $paramName)
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($paramSignature $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $fieldAssignment;
}
#set($paramName=$helper.getParamName($field,$project))
公开的##
#如果($field.modifierStatic)
静止的##
#结束
#如果($StringUtil.split($field.type),我看到了您的答案,这很好,但您必须知道,您不必为每种需要的类型使用条件使模板复杂化(即使您现在只有一个;下次呢?)
相反,为什么不为这个特定的需求创建自己的方法,并选择何时创建这些方法呢
我会第一个承认这可以做得更好一点;我只是想看看我是否能让它正常工作。尽管如此,它并不依赖于Optional
的完全限定包名;我甚至没有安装Guava,它也可以工作
#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention(
$StringUtil.sanitizeJavaIdentifier(
$helper.getPropertyName($field, $project)
)
)($StringUtil.trimEnd($StringUtil.substringAfter($field.type, "<"), ">") $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = Optional.fromNullable($paramName);
}
#set($paramName=$helper.getParamName($field,$project))
公开的##
#如果($field.modifierStatic)
静止的##
#结束
无效设置$StringUtil.CapitalWithJavaBeanConvention(
$StringUtil.sanitizeJavaIdentifier(
$helper.getPropertyName($field,$project)
)
)($StringUtil.trimEnd($StringUtil.substringAfter($field.type,“”)$paramName){
#如果($field.name==$paramName)
#if(!$field.modifierStatic)
这个##
#否则
$classname##
#结束
#结束
$field.name=可选。fromNullable($paramName);
}
你能告诉我你到底收到了什么错误吗?@thst我已经更新了上面的帖子。具体来说,该方法从未生成,并且显示了一个带有以下内容的红色气泡:不正确的方法“public void setTitle($StringUtil.split($field.type,true),"sou在哪里找到了$StringUtil?它没有afaics文档。你可以使用groovy代码来完成字符串操作。但是没有相关的示例。是的,我不太确定在哪里可以找到任何字符串操作文档。我快速搜索了jetbrain StringUtil capitalizeWithJavaBeanConvention
,发现了以下内容:。。。在那里,您可以找到StringUtil.split()
的签名。如果没有其他内容,我建议,如果您不遵循我在答案中的建议,您可以重新排列代码,以减少重复,因为大部分代码都是不必要的。@chieftwoils完成了。如果有任何其他优化,请随时提出建议–谢谢!