1

Guice はプロバイダーにバインドする方法を提供します。

    bind(A.class).toProvider(AProvider.class);

ただし、プロバイダーが例外をスローする必要がある場合、CheckedProvider は適切な基本インターフェイスのようです。

    public interface ConfigCheckedProvider<T> extends CheckedProvider<T> {
        T get() throws ConfigException;
    }

    public AProvider implements ConfigCheckedProvider<A> { ... }

しかし今、私のクラスのいくつかは A のインスタンスを注入する必要があります。そして、これは私が変更することはできません。しかし、 toProvider メソッドは CheckedProvider タイプを受け入れないようです。

Providerではなくインスタンスを注入するために CheckedProvider に基づくプロバイダーを使用するにはどうすればよいですか?

4

2 に答える 2

0

私が求めているものが意図的に提供されていないことは明らかです。ただし、Provider を実装するため、toProvider バインディングで使用できる独自のチェック済みプロバイダーを作成する場合があります。

たとえば、次の Checked Provider は理にかなっている可能性があります。

public abstract class MyCheckedProvider<T, E extends Exception> 
                      implements Provider<T> {

    public abstract T getChecked() throws E;

    @Override
    public T get() {
        try {
            return getChecked();
        } catch (Exception e) {
            throw new ProvisionException("Checked provider threw exception", e );
        }
    }
}

この MyProvider を使用すると、AProvider は次のようになります。

public class AProvider extends MyCheckedProvider<A, ConfigException> {
    @Override
    public A getChecked() throws ConfigException {
        ...
    }
}


bind(A.class).toProvider(AProvider.class);

これはすべて、プロバイダーで問題が発生した場合に ProvisionExceptions をスローする場合にのみ機能します。他のロジックの場合、MyProvider には明らかに get メソッドの他の実装が必要です...

于 2013-09-25T19:26:31.673 に答える