Android Hilt教程_构造函数
一 @Inject 后面为什么需要加上constructor()
在 Kotlin 中,@Inject constructor() 主要用于 依赖注入,告诉 Hilt 如何创建 SomeClass 的实例。
1. 为什么 @Inject 需要加 constructor()?
在 Kotlin 里,constructor() 是 显式声明主构造函数 的方式,而 @Inject 只能标注 构造函数,不能直接标注类名。
例如:
class SomeClass @Inject constructor() { fun doSomething() = "Hello Hilt!"
}
这里 @Inject constructor() 表示:
- Hilt 需要通过这个构造函数来创建
SomeClass的实例。 - Hilt 发现
@Inject后,会自动提供SomeClass的对象,无需手动创建。
2. 如果不加 constructor 会怎样?
如果尝试这样写:
class SomeClass @Inject { // ❌ 语法错误fun doSomething() = "Hello Hilt!"
}
会直接 编译错误,因为 @Inject 必须作用于构造函数,而 constructor 是构造函数的 显式声明方式。
3. constructor 省略的情况
当类没有显式的 constructor 关键字时,它默认是 无参构造函数:
class SomeClass {fun doSomething() = "Hello!"
}
但如果要让 Hilt 注入实例,必须 显式 写 @Inject constructor()。
4. 带参数的情况
如果 SomeClass 依赖其他类,比如 AnotherClass,Hilt 也能自动提供:
class AnotherClass @Inject constructor()class SomeClass @Inject constructor(private val anotherClass: AnotherClass) {fun doSomething() = "Using ${anotherClass.toString()}"
}
Hilt 会先创建 AnotherClass,然后再创建 SomeClass 并把 AnotherClass 传进去。
总结
✅ @Inject constructor() 是 Hilt 依赖注入的核心,告诉 Hilt 如何实例化一个类。
✅ 不能直接写 @Inject,必须加 constructor()。
✅ 如果类有依赖,Hilt 会自动提供并注入参数。
这样,Hilt 就能帮们自动管理 SomeClass 的创建,而不需要手动 new SomeClass() 了!
