问题 IntelliJ可以生成没有“get”前缀的getter吗?


IntelliJ具有生成Java getter的很酷功能。例如,对于一个字段 private final String foo,它会产生一个吸气剂 getFoo()

有没有什么办法可以配置IntelliJ来生成格式的getter String foo()?我主要使用不可变对象,并喜欢这种语法。


7230
2017-10-24 21:37


起源

不确定是否可能,但你想要的语法是反对的 Java编码约定。 - Luiggi Mendoza
@LuiggiMendoza这些被称为“流畅的访问者”,现在使用的更多更多。 Lombok甚至支持生成开箱即用的访问器。 - Boris the Spider
@BoristheSpider TIL。遗憾的是,我不确定这些访问器是否受到依赖的框架的支持 Java Bean命名约定 像Spring或JSF或Expression Language这样的技术。 - Luiggi Mendoza
@LuiggiMendoza是的,我知道。现在,许多框架倾向于现场访问而不是方法命名约定 - 特别是随着注释的出现。取决于OP与bean的关系。顺便说一句,这是尝试使Java更符合 统一访问原则。 - Boris the Spider
@Hbf,如果你正在使用类似的东西 AutoValue 对于您的值类,您可以在编译时而不是使用IDE生成getter,并且可以指定所需的任何方法名称。 - Louis Wasserman


答案:


整洁的问题!只是为了澄清@Danny Dan的答案,因为IntelliJ 15已经发布......

要设置它:

  • Alt键+
  • 选择 消气
  • 从中打开模板配置 '...' 在RHS上
  • 从LHS创建新模板 - 请参阅下面的示例
  •  并选择您的新模板

示例模板: fluent-getter

 public ##
 #if($field.modifierStatic)
   static ##
 #end
 $field.type ##
 ${field.name}() {
   return $field.name;
 }

你为什么想做这个?

查看 实施域驱动设计

对象设计的简单而有效的方法使价值对象忠实于无所不在的语言。指某东西的用途 getValuePercentage() 是技术计算机声明,但是 valuePercentage() 是一种流利的人类可读的语言表达。


10
2018-01-20 12:01



它不适合我 - Kailash Dabhi
clion中没有此选项? - Ken
我很难找到这个,但最终到了那里,创建了一个简短的视频 - youtu.be/ln4b0LyFsF0 - Rob Dawson


如果我理解正确,你现在就无法修改getter / setter。 在youtrack上发布

附:好的,现在Fix版本是14.1,从这个版本的想法你可以创建并直接选择getter / setter模板 Alt-Insert 菜单。


3
2017-12-10 07:42



在答案中添加了最新信息 - Danny Dan
14.1在EAP中,但尚未完全释放。 - Makoto


以下是基于@Ed。的一些略微改进的模板 以前的答案

流畅的getter:

public ##
#if($field.modifierStatic)
  static ##
#end
$field.type ##
${field.name}() {
return ##
#if (!$field.modifierStatic)
this.##
#else
  $classname.##
#end
$field.name;
}

流利的制定者:

#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
  static ##
#end
void ##
${field.name}($field.type $paramName) {
#if ($field.name == $paramName)
  #if (!$field.modifierStatic)
  this.##
  #else
    $classname.##
  #end
#end
$field.name = $paramName;
}

0
2018-05-22 17:55