android - 类型只能包含一个 @Inject 构造函数

标签 android kotlin

数据模型

data class AuthDataModel @Inject constructor(
                   var username: String = "",
                   var password: String = "",
                   var mobileData: String = "

解释

我正在尝试将身份验证数据模型注入(inject)到 kotlin 中的身份验证 View 模型中,但它不能使用消息进行编译(“类型可能只包含一个 @Inject 构造函数)

最佳答案

将我的评论移至答案:
如果你有一个带默认参数的构造函数,Kotlin 实际上会生成额外的构造函数。在您的情况下,您有一个 3 arg 构造函数,其中所有构造函数都是可选的,它总共生成 4 个构造函数。 Kotlin 显然将主构造函数上的任何注释与所有生成的注释相关联,这意味着你最终得到 4 @Inject构造函数。
你有两个选择:
首先,正如您自己提到的,删除所有默认值。如果没有默认值,则只生成一个带有注解的构造函数。
或者,您也可以自己创建其他构造函数并将其指向主构造函数。这也可以让您手动指定只有一个具有 @Inject注释,而其他没有。基本上:

data class AuthDataModel @Inject constructor(
                   var username: String,
                   var password: String,
                   var mobileData: String) {
    constructor(username: String) : this(username, "", "") {}
    constructor(username: String, password: String) : this(username, password, "") {}
}
不使用默认值会阻止生成多个@Inject 构造函数,并且辅助构造函数应该1 保持一切按预期运行。这基本上是对构造函数的重载,当某些变量是可选的时,它相当于你在 Java 中所做的。因此应该没问题。
1:我有段时间没做Android了,也没用过@Inject。如果选项 2 不起作用(如 @Inject 不允许,或无法按预期工作等),则仅保留选项 1,并要求显式传递每个参数。不过,调用主构造函数的辅助构造函数应该足以让一切正常工作。

关于android - 类型只能包含一个 @Inject 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240472/

相关文章:

android - 如何从 Android 应用程序打开 youtube 应用程序

android - 如何使用 dagger hilt android 将 MyServiceInterceptor 类添加到 networkmodule?

java - 如何修复 Kotlin 中的重载分辨率歧义(无 lambda)?

kotlin - 在Teamcity中应用版本设置时找不到项目的先前版本

android - 为什么 c.moveToFirst() 不会跳过第一行

android - 无效的 OAUTH 访问 token ,当使用应用程序访问 token 时,Android

Android的XML解析技术

java - Android - 自定义货币符号

android - 如何获取手机上所有已安装的应用程序?

java - 如何在 FrameLayout android 中为 ImageView 添加边距?