【问题标题】:Use Kotlin field from Java project problem使用 Java 项目问题中的 Kotlin 字段
【发布时间】:2021-08-09 08:10:29
【问题描述】:

我想使用 Java 中的 Koin 库。根据本教程,即使在项目的其余部分中使用 Java,也可以使用 Kotlin 编写 Koin 模块。

https://insert-koin.io/docs/quickstart/android-java/

我还为模块字段使用@JvmField 注释,因为在本教程的源代码中使用它

https://github.com/InsertKoinIO/koin/blob/master/quickstart/getting-started-koin-android/app/src/main/kotlin/org/koin/sample/AppModule.kt

在我的项目中,我使用koinInjector,这是一个模块列表

import org.koin.android.java.KoinAndroidApplication;
import org.koin.core.KoinApplication;

import static org.koin.core.context.DefaultContextExtKt.startKoin;
import static com.x.y.KoinInjectorKt.koinInjector;

public class App extends Singleton {
    @Override
    public void onCreate() {
        super.onCreate();
        KoinApplication koin = KoinAndroidApplication
                .create(this)
                .modules(koinInjector);
        startKoin(koin);
    }
}

KoinInjector.kt:

@JvmField
val koinInjector: List<Module> = listOf(
        localDbModule,
)

但是在构建过程中我得到了错误:

error: cannot find symbol
import static com.x.y.KoinInjectorKt.koinInjector;
                               ^
  symbol:   class KoinInjectorKt
  location: package com.x.y

【问题讨论】:

  • 声明koinInjector的kotlin文件的文件名是什么?
  • KoinInjector 。而导入中的名称KoinInjectorKt是自动生成的
  • 在构建脚本中可能存在(细微的)差异?你能包括你的build.gradle 文件吗?

标签: java android kotlin koin


【解决方案1】:

我必须添加

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10"

构建.gradle 和

apply plugin: 'kotlin-android' 到 build.gradle (app)`

现在可以了。

感谢@Jeroen Steenbeeke 的评论

【讨论】:

    【解决方案2】:

    尝试将代码替换为 -

    import org.koin.android.java.KoinAndroidApplication; 
    import org.koin.core.KoinApplication;
    
    import static org.koin.core.context.DefaultContextExtKt.startKoin;
    import static com.x.y.KoinInjectorKt.koinInjector;
    
    public class App extends Singleton {
     @Override
     public void onCreate() {
        super.onCreate();
        KoinApplication koin = KoinAndroidApplication
                .create(this)
                .modules(listOf(localDbModule));
        startKoin(koin);
       }
    } 
    

    【讨论】:

      【解决方案3】:

      删除此导入

      '导入静态com.x.y.KoinInjectorKt.koinInjector;'

      并像这样编写代码

      public class App extends Singleton {
      @Override
      public void onCreate() {
          super.onCreate();
          List<Module> list = new ArrayList<Module>();
          list.add(localDbModule);
          KoinApplication koin = KoinAndroidApplication
                  .create(this)
                  .modules(list);
          startKoin(koin);
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2020-04-06
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 2011-10-23
        相关资源
        最近更新 更多