Android Hilt教程_构造函数

一 @Inject 后面为什么需要加上constructor()

在 Kotlin 中,@Inject constructor() 主要用于 依赖注入 ,告诉 Hilt 如何创建 SomeClass 的实例。


1. 为什么 @Inject 需要加 constructor()

在 Kotlin 里,constructor()显式声明主构造函数 的方式,而 @Inject 只能标注 构造函数,不能直接标注类名。

例如:

kotlin 复制代码
class SomeClass @Inject constructor() { 
    fun doSomething() = "Hello Hilt!"
}

这里 @Inject constructor() 表示:

  • Hilt 需要通过这个构造函数来创建 SomeClass 的实例
  • Hilt 发现 @Inject 后,会自动提供 SomeClass 的对象,无需手动创建。

2. 如果不加 constructor 会怎样?

如果尝试这样写:

kotlin 复制代码
class SomeClass @Inject {  // ❌ 语法错误
    fun doSomething() = "Hello Hilt!"
}

会直接 编译错误 ,因为 @Inject 必须作用于构造函数,而 constructor 是构造函数的 显式声明方式


3. constructor 省略的情况

当类没有显式的 constructor 关键字时,它默认是 无参构造函数

kotlin 复制代码
class SomeClass {
    fun doSomething() = "Hello!"
}

但如果要让 Hilt 注入实例,必须 显式@Inject constructor()


4. 带参数的情况

如果 SomeClass 依赖其他类,比如 AnotherClass,Hilt 也能自动提供:

kotlin 复制代码
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() 了!

相关推荐
alexhilton5 分钟前
千万别误用Android Skills
android·kotlin·android jetpack
淡淡的香烟1 小时前
Android视频直播播放器简单封装
android·物联网·音视频
爱笑鱼1 小时前
Android 系统启动机制导读:从 init 到 system_server,谁创建谁?
android
爱笑鱼1 小时前
Android 系统启动机制(一):init 到底是什么?为什么它不是普通 Native Service?
android
必须会一定会2 小时前
GLM-5.3 迁移实战:强制思考、1M 上下文与官方编程基准
android·开发语言·kotlin
小孔龙2 小时前
Android MessageQueue:从单锁队列到 DeliQueue
android
math_hongfan2 小时前
事务下单与状态流转:ArkTS 的 JOIN 联表在鸿蒙订单里实战
android·学习·华为·harmonyos
嘟哩DuliDuli2 小时前
AI 账单变高的技术原因:重复上下文和用量归属
android·人工智能·安全·ai·软件工程
阿pin17 小时前
Android随笔-kotlin withContext
android·kotlin·withcontext
树码小子18 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea