public class Multibinder<T>
extends java.lang.Object
public class SnacksModule extends AbstractModule {
protected void configure() {
Multibinder<Snack> multibinder
= Multibinder.newSetBinder(binder(), Snack.class);
multibinder.addBinding().toInstance(new Twix());
multibinder.addBinding().toProvider(SnickersProvider.class);
multibinder.addBinding().to(Skittles.class);
}
}
With this binding, a Set
<Snack>
can now be injected:
class SnackMachine {
@Inject
public SnackMachine(Set<Snack> snacks) { ... }
}
If desired, Collection
<Provider<Snack>>
can also be injected.
Contributing multibindings from different modules is supported. For example, it is okay for
both CandyModule
and ChipsModule
to create their own Multibinder<Snack>
,
and to each contribute bindings to the set of snacks. When that set is injected, it will contain
elements from both modules.
The set's iteration order is consistent with the binding order. This is convenient when multiple elements are contributed by the same module because that module can order its bindings appropriately. Avoid relying on the iteration order of elements contributed by different modules, since there is no equivalent mechanism to order modules.
The set is unmodifiable. Elements can only be added to the set by configuring the multibinder. Elements can never be removed from the set.
Elements are resolved at set injection time. If an element is bound to a provider, that provider's get method will be called each time the set is injected (unless the binding is also scoped).
Annotations are be used to create different sets of the same element type. Each distinct annotation gets its own independent collection of elements.
Elements must be distinct. If multiple bound elements have the same value, set injection will fail.
Elements must be non-null. If any set element is null, set injection will fail.
Modifier and Type | Method and Description |
---|---|
LinkedBindingBuilder<T> |
addBinding()
Returns a binding builder used to add a new element in the set.
|
boolean |
equals(java.lang.Object obj) |
int |
hashCode() |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
java.lang.Class<T> type)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with no binding annotation. |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
java.lang.Class<T> type,
java.lang.annotation.Annotation annotation)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with annotation . |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
java.lang.Class<T> type,
java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with annotationType . |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
Key<T> key)
Returns a new multibinder that collects instances of the key's type in a
Set that is
itself bound with the annotation (if any) of the key. |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
TypeLiteral<T> type)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with no binding annotation. |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
TypeLiteral<T> type,
java.lang.annotation.Annotation annotation)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with annotation . |
static <T> Multibinder<T> |
newSetBinder(Binder binder,
TypeLiteral<T> type,
java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
Returns a new multibinder that collects instances of
type in a Set that is
itself bound with annotationType . |
Multibinder<T> |
permitDuplicates()
Configures the bound set to silently discard duplicate elements.
|
public static <T> Multibinder<T> newSetBinder(Binder binder, TypeLiteral<T> type)
type
in a Set
that is
itself bound with no binding annotation.public static <T> Multibinder<T> newSetBinder(Binder binder, java.lang.Class<T> type)
type
in a Set
that is
itself bound with no binding annotation.public static <T> Multibinder<T> newSetBinder(Binder binder, TypeLiteral<T> type, java.lang.annotation.Annotation annotation)
type
in a Set
that is
itself bound with annotation
.public static <T> Multibinder<T> newSetBinder(Binder binder, java.lang.Class<T> type, java.lang.annotation.Annotation annotation)
type
in a Set
that is
itself bound with annotation
.public static <T> Multibinder<T> newSetBinder(Binder binder, TypeLiteral<T> type, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
type
in a Set
that is
itself bound with annotationType
.public static <T> Multibinder<T> newSetBinder(Binder binder, Key<T> key)
Set
that is
itself bound with the annotation (if any) of the key.public static <T> Multibinder<T> newSetBinder(Binder binder, java.lang.Class<T> type, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
type
in a Set
that is
itself bound with annotationType
.public Multibinder<T> permitDuplicates()
public LinkedBindingBuilder<T> addBinding()
It is an error to call this method without also calling one of the to
methods on the
returned binding builder.
Scoping elements independently is supported. Use the in
method to specify a binding
scope.
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object