Dagger 2,@set:Inject和@Inject的区别是什么?

6
在一个Android的Kotlin项目中,看到了这个@set:Inject,但是找不到一个好的解释。有人知道吗?
object Controller {

    @set:Inject
    lateinit var someData: SomeData

2
它确定@Inject注解是在字段上,还是在getter或setter方法上。 - EpicPandaForce
相关链接:https://dev59.com/-5Tfa4cB1Zd3GeqPKwMf#35362799 - EpicPandaForce
1个回答

11

@Inject注解可用于方法、构造函数或字段:

@Target(value={METHOD,CONSTRUCTOR,FIELD})

记住,从这个 Kotlin 代码中会生成 Java 代码,对于 Kotlin 中的一个语句,在 Java 中可能有多个元素,这就是为什么 @set:Inject 明确指定应将 @Inject 注解应用于在 Java 中生成的 setter。

如果没有定义 use-site target 会发生什么?官方文档 提供了很好的解释:

如果您没有指定 use-site target,则根据所使用的注解的 @Target 注解选择目标。如果有多个适用的目标,则使用以下列表中的第一个适用目标:

  • param(构造函数参数);
  • property(此目标的注释对 Java 不可见);
  • field;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接