| A @Provides or @Produces method that returns its single parameter has long been |
| Dagger's only mechanism for delegating a binding. Since the delegation is |
| implemented via a user-defined method there is a disproportionate amount of |
| overhead for such a conceptually simple operation. @Binds was introduced to |
| provide a declarative way of delegating from one binding to another in a way |
| that allows for minimal overhead in the implementation. @Binds should always be |
| preferred over @Provides or @Produces for delegation. |
| |
| For instance, the following `@Provides` method |
| |
| ```java |
| @Provides static Heater provideHeater(ElectricHeater heater) { |
| return heater; |
| } |
| ``` |
| |
| is equivalent to the following preferred `@Binds` method. |
| |
| ```java |
| @Binds abstract Heater bindHeater(ElectricHeater impl); |
| ``` |