匕首2,@ set:Inject和@Inject有什么区别

时间:2018-07-25 15:16:09

标签: android dependency-injection kotlin dagger-2

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

object Controller {

    @set:Inject
    lateinit var someData: SomeData

1 个答案:

答案 0 :(得分:5)

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

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

重要的是要记住,Java代码将从此Kotlin代码生成,并且对于Kotlin中的一条语句,您可以具有多个Java元素,这就是@set:Inject明确指定@Inject批注应应用于将以Java生成的setter。

如果未定义使用场所目标,会发生什么? Official documentation提供了很好的解释:

  

如果您未指定使用场所目标,则根据   到使用的注释的@Target注释。如果有   多个适用目标,   使用以下列表:

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