匕首问题-生成用例有错误

siv3szwd  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(334)

我创建了我的用例并设置了输入和输出,然后在模块上提供了它,一切正常。

class GetProfileUseCase constructor(
    private val repository: Repository,
    defaultDispatcher: CoroutineDispatcher
) : SuspendUseCase<Request, ResultEntity<Response>>(defaultDispatcher) {

    override suspend fun execute(parameters: Request): ResultEntity<Response> {
        return repository.getProfile(parameters)
    }
}

这是我的数据类

sealed class GetProfile : Serializable {

    data class Request(
        val nothing: Nothing? = null
    ) : GetProfile()

    data class Response(
        val user: User? = User()
    ) : GetProfile()
}

因为请求类中没有参数,我尝试将其更改为:

object Request

但当生成ide错误时:
错误:在类viewmodel\u工厂中创建的方法不能应用于给定的类型;
这是我的视图模型:

class ViewModel @Inject constructor(
    private val getProfileUseCase: GetProfileUseCase
) : BaseViewModel()

我不知道为什么会这样,匕首不能生成类!!!
当将请求设置为数据类时,它不会出错,但当将其设置为对象类时,它会崩溃

ckocjqey

ckocjqey1#

因为请求类中没有参数,所以我尝试将其更改为:object request
你好像认为 object 与a相同 class 只有一个no参数 constructor ,这不是真的。为了完全理解,我鼓励你阅读这篇文章。然而,我将试图提供一个简短的解释,为什么你的代码不工作
当你这么做的时候 object Request ,它使 Request 一个单例,意味着你不能再创建它的 instances 使用 val instance = Request() ,原因是 constructorRequest 由kotlin编译器标记为private。
所以当你的代码( dagger )试图注射 Request 使用 new Request() ,它会给你错误。

相关问题