1

我有以下 Kotlin 类:

@ExperimentalCoroutinesApi
class SharedPrefClient 
    @Inject constructor(private val prefs: SharedPreferences) 
      : SharedPreferences by prefs {

   ...

}

在 Dagger 中,我在构建项目时收到以下错误:

在此处输入图像描述

但是当我删除类委托时它会起作用: SharedPreferences by prefs

现在我的问题是如何同时使用 Dagger 和 Kotlin 类委托。

4

1 回答 1

1

在我看来,问题在于android.annotation.Nullable使用关键字将哪些内容拉入您的代码by,但无法从 Android 源代码外部访问。

通常,如果无法解析类型,您会直接看到错误,但在这种情况下,Kotlin 会生成带有未知注解的 Java 代码,而 Dagger 会尝试处理它,从而导致您的错误。

如果您创建自己的界面而不是SharedPreferences它,它将像您期望的那样正常工作。

您可能能够以android.annotation.Nullable某种方式添加到您的(仅编译)类路径中,以便 Dagger 可以做它的事情,但找到另一种方法可能更容易。


我看到你可以在这里提出的三个问题

  • 匕首应该更好地失败。在这种情况下,错误消息几乎没有帮助
  • Android 不应公开内部/隐藏类型,
  • 和/或 Kotlin 不应该引入那些隐藏的类型
于 2019-11-19T19:01:52.757 回答