Dagger2将演示者注入到Kotlin Activity错误中

我使用dragger2将演示者注入到Kotlin Activity中,演示者为null,这是我的代码:

class CategoryDetailActivity : MvpActivity<ProductFilterView,ProductFilterPresenter>(), ProductFilterView { private lateinit var presenter: ProductFilterPresenter @Inject set override fun onCreate(savedInstanceState: Bundle?) { initialInjector() super.onCreate(savedInstanceState) setContentView(R.layout.activity_category_detail) initData() initEvent() } private fun initialInjector() { DaggerProductFilterComponent.builder() .applicationComponent(applicationComponent) .productFilterModule(ProductFilterModule()) .build() .inject(this) } override fun getPresenter(): ProductFilterPresenter { return presenter!! } 

}

在MvpActivity的onCreate()中调用getPresenter()方法,而MvpActivity是一个java类。 初始的演示者需要一些由ProductFilterModule提供的实例,也许演示者应该是初始化后的组件注入,我猜。 当我运行时,抛出KotlinNullPointerException,主持人为空。

 time: FATAL EXCEPTION: main Process: com.chiquedoll.chiquedoll, PID: 10617 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chiquedoll.chiquedoll/com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity}: kotlin.KotlinNullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: kotlin.KotlinNullPointerException at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.getPresenter(CategoryDetailActivity.kt:281) at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.getPresenter(CategoryDetailActivity.kt:36) at com.chiquedoll.chiquedoll.view.activity.MvpActivity.onCreate(MvpActivity.java:19) at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.onCreate(CategoryDetailActivity.kt:65) at android.app.Activity.performCreate(Activity.java:6237) 

如果我使用java来做到这一点,没有问题。

Dagger 2不使用setter来注入字段,它直接赋值。 因此,正确的版本将是:

 @Inject internal lateinit var presenter: ProductFilterPresenter 

请注意,匕首2需要注射领域至少是internalprivate将无法正常工作。