我是 Android 开发新手,目前正在构建我的第一个真正的应用程序。我正在尝试实现 MVVM 架构,因此我为每个片段都有一个 viewModel,并且每个 viewModel 都有一个 viewModelFactory。至少,我是这么理解的。
我使用每个人似乎都用于工厂的样板代码:
class ExampleViewModelFactory(private val exampleDao: ExampleDao) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(exampleViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return ExampleViewModel(exampleDao) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,编译器给了我以下错误:
e: C:\Users\ ...\ExampleViewModel.kt: (64, 7):仅允许使用 -Xjvm-default 选项从具有“@JvmDefault”成员的接口继承
这个错误是由我在 viewModel 中实现的 viewModelFactory 类产生的。我真的不知道这意味着什么,我找不到任何有用的东西,甚至找不到与我的具体问题相关的东西。我基本上遵循了一些有关创建第一个应用程序的基本教程,但我不断遇到这样的错误。在大多数情况下,我都能自己解决问题,但这一次有所不同。
我知道你们很多人都有丰富的经验和知识,所以我希望你们中的一些人抽出时间来帮助我,并给我一些提示,我可以做些什么来解决这个问题。
ian*_*ake 63
看来您直接或间接(通过其他一些库)取决于Lifecycle2.5.0-alpha01。
根据这个问题:
您需要临时将以下内容添加到您的
build.gradle:Run Code Online (Sandbox Code Playgroud)tasks.withType(KotlinCompile).configureEach { kotlinOptions { freeCompilerArgs += [ "-Xjvm-default=all", ] } }请注意,在某些情况下您可能想要使用
all-compatibility而不是,请在Jebrain 的博客文章all中了解更多信息。从 kotlin 1.6.20 开始,您将不需要 touch build.gradle 有关更多信息,请参阅KT-47000
小智 22
更新; 如果您使用1.6.20Kotlin 版本,则build.gradle不需要进行更改。
旧答案:
尝试将这些行放在模块 build.gradle 文件中的 android{} 块内
kotlinOptions{
freeCompilerArgs += [
"-Xjvm-default=all",
]
}
Run Code Online (Sandbox Code Playgroud)
如果上面的代码不起作用,请尝试在 dependency{} 块中添加以下行
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach{
kotlinOptions{
freeCompilerArgs +=["-Xjvm-default=all",]
}
}
Run Code Online (Sandbox Code Playgroud)
@ianhanniballake 答案的 Kotlin 版本 (kts)
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class).configureEach {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + "-Xjvm-default=all"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12785 次 |
| 最近记录: |