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() 了!

相关推荐
90后的晨仔13 小时前
解决 Android 构建报错:Unable to delete file .../file-map.txt
android·前端
mg66814 小时前
安卓玩机工具----安卓手机变成桌面电脑!多窗口镜像+音频投射+游戏操控,无需 Root
android·智能手机·电脑
peakmain915 小时前
异常处理 - Native 层的崩溃捕获机制及实现 (一)
android·性能优化
木头左16 小时前
【Android】听写播放器改版:中英文书写速度拆项与「正在读」高亮
android·room·media3·jetpack compose·听写
好的佩奇16 小时前
Dart 之方法、操作符与可调用对象
android·flutter·dart
恋猫de小郭17 小时前
Flutter Impeller Vulkan 内存持续上涨,问题没想到是文字阴影
android·前端·flutter
张小姐的猫1 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
朱涛的自习室1 天前
212 个需求、22 万行代码:Agent 接管开源项目的 19 天
android·前端·人工智能
传奇开心果1 天前
【Flutter踩坑排雷】第3课:const 误用坑|const 错误使用引发 UI 异常与性能损耗
android·flutter