java - @Binds 方法必须只有一个参数,其类型可分配给返回类型

标签 java android dagger-2 dagger

我正在迁移到新的 dagger android 2.11

所有设置均基于 Google 蓝图:MVP-Dagger。但我遇到此错误:

Error:(22, 57) error: @Binds methods must have only one parameter whose type is assignable to the return type

在这一行中:

   @ActivityScoped
    @Binds abstract PresenterFactory<MainContract.Presenter> providePresenterFactory(MainPresenter presenter);

主持人:

@ActivityScoped
public class MainPresenter extends BasePresenterImpl<MainContract.View>
    implements MainContract.Presenter { public MainPresenter(String s) {..
} ... }

有人知道如何解决这个问题吗?谢谢。

最佳答案

错误信息解释了一切:

@Binds methods must have only one parameter whose type is assignable to the return type

你的 @Binds方法的参数为 MainPresenter .这不可分配给返回类型 PresenterFactory<MainContract.Presenter> .换句话说,MainPresenter不是 PresenterFactory<MainContract.Presenter> 的实例.

@Binds 的正确语法方法类似于:

@Binds
abstract Abstraction bindAbstration(Concretion concretion)

哪里concretionAbstraction 的实例.

或者,在 Kotlin 中:

@Binds
abstract fun bindAbstraction(concretion: Concretion) : Abstraction

@Binds方法不是魔术。它们绑定(bind)一个类型(例如,一个接口(interface))和该类型的实现,Dagger 知道如何提供

更新

您可以转换您的 @Provides@Binds通过以下步骤:

  1. 确保MainPresenter有一个用 @Inject 注释的显式构造函数并且 Dagger 2 可以在构造函数中提供依赖项。
  2. 写:

    @Binds
    abstract MainContract.Presenter bindPresenter(MainPresenter mainPresenter);
    

关于java - @Binds 方法必须只有一个参数,其类型可分配给返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46656117/

相关文章:

java - 查找 String 是否不在 ENUM 列表中的最佳方法

java - 为什么我不能传递引用地址而不是包裹/串行对象?

java - Android 中 undefined reference native 库

android - 在运行时检查 Intent ?

java - 是否有可以 "diff"两个对象的 Java 库?

java - 在抽屉导航中加载具有不同参数的单个 fragment

java - 无法将 Dagger 2 依赖项添加到 java 模块

android - 如何提供具有 Dagger 依赖项的 Activity 上下文?

android - 使用 Dagger 2 注入(inject) Androidx fragment

java - 通过 HTTP 发送旧版 JavaBean