java - How to bind to CheckedProvider in guice? -
guice provides way bind provider:
bind(a.class).toprovider(aprovider.class);
although if provider needs throw exception seems checkedprovider right base interface:
public interface configcheckedprovider<t> extends checkedprovider<t> { t get() throws configexception; } public aprovider implements configcheckedprovider<a> { ... }
but of classes need instance of injected. , can't change. looks toprovider method doesn't accept checkedprovider types.
how can use providers based on checkedprovider inject instances not providers?
as requested, i'm posting comment answer.
if have class t
, checked provider tprovider extends checkedprovider<t>
, cannot inject t
:
@inject someclass(t t) { // won't work ... }
as able if had used plain provider<t>
. done intentionally. checked providers needed when creation of object may fail particular type of exception, , failure must handled user code. plain providers not have such feature.
provider<t>
not allow throwing checked exceptions get()
method, , unchecked exceptions throws may wrapped provisionexception
, cannot reliably catch exception. also, if inject t
directly , provider's get()
method fails, error during injection, may lead incomprehensible stacktraces (especially if not using injector
s directly) or absence.
checked providers allow throw predeclared types of exceptions providers, , these exceptions guaranteed passed code calls get()
on checked provider. way can reliably catch them, in return lose ability inject objects created provider directly.
see this manual on throwing , checked providers more background on have written.
Comments
Post a Comment