24

次のようにチェーンできるように、セッターが必要です。

myPojo.setX(x).setY(y);

通常、私は Eclipse でセッターを生成しますが、残念ながらcode templateセッターの場合、署名ではなく、セッターの本体のみを変更できます。

上記を完了する最も簡単な方法は何ですか? 検索と置換 + 手動編集以外に? :)

4

8 に答える 8

8

追加のインストールを必要としない一種のパッチを提供できます。

ウィンドウ/設定/Java/コード スタイル/コード テンプレートに移動します。「setter body」テンプレートを次のように編集します。

${field} = ${param};
return this;

「ゲッターとセッターの生成」を実行すると、次のようなセッターが作成されます。

public void setMyField(String myField) {
    this.myField = myField;
    return this;
}

メソッドの型が であるため、これは明らかにコンパイル エラーを引き起こしますvoidCtrl-Fしかし、すべての 'public void set'をストライクして置き換えることができますpublic YourClassName set

パッチですが動作します...

于 2012-09-06T07:32:46.840 に答える
7

この目的のためにエディター/テンプレートを使用できます。新しいテンプレートを定義するには、「設定」ウィンドウを開き、次に「Java」->「エディター」->「テンプレート」を開きます。このウィンドウで、新しいテンプレートを定義して名前を付けることができます。例えば:

public ${enclosing_type} setName(${argType} name) {
    this.name = name;
    return this;
}

settrなどの名前を付けます。次に、「settr」と入力してからCtrl-Spaceを押すことにより、Javaコードでこのテンプレートを使用できます。

于 2012-09-06T07:22:22.813 に答える
5

fluent-builders-generator プラグインを使用して、必要な方法でセッターを生成できる場合があります。

于 2012-09-06T07:15:57.523 に答える
0

JavaForger では、以下のテンプレートを使用してセッターを生成できます。これは、ゲッターとセッターを生成するすべてのクラスに対してメイン メソッドを実行する必要があることを意味します。

<#list fields as field>
  /**
   * Sets the ${field.name} of the {@link ${class.name}}.
   *
   * @param ${field.name} The input {@link ${field.nonPrimitiveType}}. 
   */
  public ${class.name} ${field.setter}(${field.type} ${field.name}) {
    this.${field.name} = ${field.name};
    return this;
  }
</#list>

以下のコードは、「myClass.java」というクラスに対して上記のテンプレート (setter.javat) を実行し、生成されたコードを inputclass とマージします。既存のセッターが存在する場合はオーバーライドします。

JavaForgerConfiguration config = JavaForgerConfiguration.builder()
  .withTemplate("setters.javat")
  .withMergeClassProvider(ClassProvider.fromInputClass(s -> s))
  .withOverride(true)
  .build();
JavaForger.execute(config, "myClass.java");

「setters.javat」の場所を次のように追加する必要があります。

StaticJavaForgerConfiguration.addTemplateLocation("my/location/");

プロジェクトはhttps://github.com/daanvdh/JavaForgerにあります。

于 2019-09-10T09:23:03.883 に答える