私の問題は、ファクトリへの 2 つの文字列引数で @Assisted を使用することに要約されます。問題は、Guice が型をパラメーターの識別メカニズムとして扱うため、両方のパラメーターが同じであり、構成エラーが発生することです。
いくつかのコード:
public class FilePathSolicitingDialog {
//... some fields
public static interface Factory {
public FilePathSolicitingDialog make(Path existingPath,
String allowedFileExtension,
String dialogTitle);
}
@Inject
public FilePathSolicitingDialog(EventBus eventBus,
SelectPathAndSetTextListener.Factory listenerFactory,
FilePathDialogView view,
@Assisted Path existingPath,
@Assisted String allowedFileExtension,
@Assisted String dialogTitle) {
//... typical ctor, this.thing = thing
}
// ... methods
}
問題は、二重文字列パラメーターにあります。
各文字列に個別の @Named("as appropriate") 注釈を付けようとしましたが、構成エラーが増えるだけです。これらのエラーの音から、彼らはファクトリ クラスにバインディング アノテーションを望んでいないので、カスタム バインディング アノテーションは試していません。
シンプルでノイズの多い解決策は、これら 3 つの補助値を含む単純な引数クラスを作成し、単純にそれを注入することです。
public static class Config{
private final Path existingPath;
private final String allowedFileExtension;
private final String dialogTitle;
public Config(Path existingPath, String allowedFileExtension, String dialogTitle){
this.existingPath = existingPath;
this.allowedFileExtension = allowedFileExtension;
this.dialogTitle = dialogTitle;
}
}
public static interface Factory {
public FilePathSolicitingDialogController make(Config config);
}
@Inject
public FilePathSolicitingDialogController(EventBus eventBus,
SelectPathAndSetTextListener.Factory listenerFactory,
FilePathDialogView view,
@Assisted Config config) {
//reasonably standard ctor, some this.thing = thing
// other this.thing = config.thing
}
}
これは機能し、かなりバグがない可能性がありますが、うるさいです。そのネストされた静的クラスを取り除く何らかの方法があればいいでしょう。
助けてくれてありがとう!