Вводить в анонимный внутренний класс (джин)
-
12-11-2019 - |
Вопрос
У меня есть что-то подобное:
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
.
Это анонимный внутренний класс абстрактного класса Extreceiver.ExteCeiver предназначен для обработки ошибок с ошибкой, который я хочу предоставить.
public abstract class ExtReceiver<T> extends Receiver<T> {
private ErrorHandler errorHandler;
public ExtReceiver() {
}
@Inject
public void setErrorHandler(ErrorHandler errorHandler)
{
this.errorHandler = errorHandler;
}
@Override
public abstract void onSuccess(T response);
@Override
public void onFailure(ServerFailure error) {
errorHandler.exception(error);
}
@Override
public void onViolation(Set<Violation> errors) {
ValidationUtils.processViolation(errors);
}
}
.
Я понимаю, почему это не может работать, потому что я использую новый оператор.Но как я мог сделать что-то вроде этого.Я хочу иметь этот анонимный класс и не ставить его в собственный файл или что-то. Как я могу ввести эту ошибку?Думал о статинжениях, но похоже, что это тоже не работает (может быть, из-за наследства я создаю с помощью анонимного класса)
в противоположном обычном республике, я не знаю инжектор. Gteginsstance () вызов.
Для информации: это запрошенный вызов
Решение
Почему бы вам не поместить параметр ErrorHandler в конструктор вашего абстрактного класса вместо этого, создавая отдельный SeteRorHandler Setter, что-то вроде этого:
public abstract class ExtReceiver<T> extends Receiver<T> {
private ErrorHandler errorHandler;
@Inject
public ExtReceiver(ErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
}
.
.
public class MyClientModule extends AbstractGinModule {
protected void configure() {
bind(ErrorHandler.class).in(Singleton.class);
}
}
.
@GinModules(MyClientModule.class)
public interface MyErrorHandlerInjector extends Ginjector {
ErrorHandler getErrorHandler();
}
а затем используйте это так:
MyErrorHandlerGinjector injector = GWT.create(MyErrorHandlerGinjector.class);
ErrorHandler errorHandler = injector.getErrorHandler();
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>(errorHandler) {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
.
Я думаю, что это должно работать.