mój problem sprowadza się do używania @Assisted z dwoma argumentami tekstowymi do fabryki. Problem polega na tym, że ponieważ Guice traktuje typ jako mechanizm identyfikacji parametrów, oba parametry są takie same i pojawia się błąd konfiguracji.Używanie @Assisted inject z wieloma paramami tego samego typu (@Named params)
Niektóre Kod:
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
}
Problem leży w parametrach podwójnych strun.
Próbowałem oznaczać każdy ciąg osobnymi adnotacjami @Named ("odpowiednio"), ale to tylko prowadzi do większej liczby błędów konfiguracji. Od dźwięku tych błędów nie chcą wiązać adnotacje na fabryce, więc nie próbowałem niestandardowych adnotacji wiążących.
Prosta i hałaśliwe rozwiązaniem jest utworzenie prostą klasę argument zawierające te trzy wartości wspomaganiem, a po prostu wstrzyknąć że:
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
}
}
To działa i może być dość wolna od błędów, ale jest głośny. Sposób na pozbycie się tej zagnieżdżonej klasy statycznej byłoby miłe.
Dzięki za pomoc!
Dzięki za to. – Groostav