bind(new TypeLiteral<Reporting<ReportingEvent>>(){}).to(ReportingImpl.class).in(Singleton.class);
является привязкой для универсального c Reporting<ReportingEvent>
, в то время как
OptionalBinder.newOptionalBinder(binder(), Reporting.class);
фактически указывает необработанный тип Reporting
. Вместо этого вы хотите использовать перегрузку для newOptionalBinder
, которая указывает аргумент TypeLiteral , так что вы говорите об одном и том же в необязательном запросе и в привязке:
OptionalBinder.newOptionalBinder(binder(), new TypeLiteral<Reporting<ReportingEvent>>(){});
Без этого вы в основном говорите, что «любое связывание с отчетностью будет удовлетворять этому требованию», даже что-то вроде Reporting<Object>
- и что будет, если связать больше одного?
С другой стороны, если вы на самом деле хотите разрешить любое связывание любого типа Reporting
(что и предполагает ваша ошибка, тогда вместо этого происходит обратное: вместо привязки к raw Reporting
, вы указали вместо этого generi c impl. Измените этот вызов bind (), сказав, что «на самом деле это работает только для необработанных запросов»:
bind(Reporting.class).to(ReportingImpl.class).in(Singleton.class);