10

IntelliJ が生成するゲッター/セッターをより賢くする方法はありますか? 特に、フィールド名にアンダースコアが含まれている場合、getter はアンダースコアを取り除いて CamelCase に変換できますか?

たとえば、以下の getter は getCarneAsada() であると予想します。

public class Taco {
  private String carne_asada;

  public String getCarne_asada() {
    return carne_asada;
  }
}

この領域は見つかりましたCode Style->Java->Code Generationが、どのオプションも適切ではないようです...除外したい接頭辞でも接尾辞でもありません。内側のアンダースコアです。

4

2 に答える 2

8

IntelliJ IDEA 2016 および Android Studio 2.2 で動作する getter/setter を生成するためのテンプレートを次に示します。

ラクダ化ゲッター:

#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;
}

ラクダ塗りのセッター:

#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;
}

上記の流暢なゲッター/セッターが必要な場合は、私の要点を参照してください。

https://gist.github.com/k24/72d0be3d76d4eb987c6d4eb1d8f42db2

于 2017-01-12T14:18:00.170 に答える