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

lan*_*nyf 2 android dependency-injection kotlin dagger-2

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

object Controller {

    @set:Inject
    lateinit var someData: SomeData
Run Code Online (Sandbox Code Playgroud)

Ser*_*hyk 6

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

@Target(value={METHOD,CONSTRUCTOR,FIELD})
Run Code Online (Sandbox Code Playgroud)

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

如果未定义使用场所目标,该怎么办?官方文档提供了很好的解释:

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

  • 参数(构造函数参数);
  • 属性(此目标的注释对Java不可见);
  • 领域;