在项目中使用KT + Dagger2,在注入的时候,代码如下:
class MainActivity : AppCompatActivity() {
@Inject
var presenter : Presenter? = null
在代码编译时,直接报错: 其实已经说过很清楚了,Dagger不支持私有属性的注入,那这个就比较尴尬了,因为Kt 中的presenter 反编译代码如下:
public final class MainActivity extends androidx.appcompat.app.AppCompatActivity {
@org.jetbrains.annotations.Nullable()
@javax.inject.Inject()
private com.xing.jetpacklearn.Presenter presenter;
public MainActivity() {
super();
}
此时presenter 的属性为private ,不符合Dagger的要求。那应该怎么处理呢?两种方法:
方法一: 代码如下:
class MainActivity : AppCompatActivity() {
var presenter : Presenter? = null
@Inject set
}
只需要在属性的set方法上添加@Inject 即可。
方法二: 使用`@JvmField`关键字修饰:
class MainActivity : AppCompatActivity() {
@Inject
@JvmField
var presenter : Presenter? = null
}
都可以解决。
|