Package dagger

Annotation Interface Binds


@Documented @Retention(RUNTIME) @Target(METHOD) public @interface Binds
Annotates abstract methods of a Module that delegate bindings. For example, to bind Random to SecureRandom a module could declare the following: @Binds abstract Random bindRandom(SecureRandom secureRandom);

@Binds methods are a drop-in replacement for Provides methods that simply return an injected parameter. Prefer @Binds because the generated implementation is likely to be more efficient.

A @Binds method:

  • Must be abstract.
  • May be scoped.
  • May be qualified.
  • Must have a single parameter whose type is assignable to the return type. The return type declares the bound type (just as it would for a @Provides method) and the parameter is the type to which it is bound.

    For multibindings, assignability is checked in similar ways:

    IntoSet
    The parameter must be assignable to the only parameter of Set.add(E) when viewed as a member of the return type — the parameter must be assignable to the return type.
    ElementsIntoSet
    The parameter must be assignable to the only parameter of Set.addAll(java.util.Collection<? extends E>) when viewed as a member of the return type — if the return type is Set<E>, the parameter must be assignable to Collection<? extends E>.
    IntoMap
    The parameter must be assignable to the value parameter of Map.put(K, V) when viewed as a member of a Map in which V is bound to the return type — the parameter must be assignable to the return type