2

単純な AutoValue クラスがあるとします。

@AutoValue abstract class Foo {
  abstract CommonDependency commonDep();
  abstract String uniqueDataPerInstance();

  static Foo create(CommonDependency commonDep, String data) {
    return new AutoValue_Foo(commonDep, data);
  }
}

ファクトリーが必要になったので、Foo が必要になるたびに commonDep を渡す必要がなくなりました。これが AutoValue クラスでない場合は、 CommonDependency に注釈を付けることで、これに AutoFactory を簡単に使用できます@Provided

これら 2 つのコード ジェネレーターをうまく連携させる方法を知っていますか?

4

1 に答える 1

1

@AutoFactory注釈は非抽象クラスにしか適用できないため、これは非常に興味深い問題です。

エラー: 自動ファクトリは、抽象クラスへの適用をサポートしていません。

注釈付きコンストラクターの場合、コンパイラーが失敗した後に有用なエラー メッセージさえありませんでした。

コード生成プロセスには自動値クラスしかないためabstractfinal最後と最後のクラスに注釈を付ける必要があります。mustBeFinal()これを行うには、クラス宣言または最終クラスのコンストラクターに注釈を付ける自動値拡張を実装する必要があります@AutoFactory

コンストラクターのパラメーターに適切に注釈を付ける必要があるため、別の問題が発生しています。その@Providedため、@Nullableまたは@Qualifierそこに注釈を追加する必要があります。ここでの最大の問題は、メソッドを@Provided定義@Target(PARAMETER)し、auto-value ではメソッドのみを定義することです。

自分で実装したくない場合は、 を使用してみてくださいauto-value-factory。両方の自動ライブラリがどのように連携するかを確認するプロセスで実装しました。

于 2017-03-19T16:11:49.717 に答える