首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【Kotlin】类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

文章目录 一、lateinit 延迟初始化 ( ::属性名称.isInitialized 检查属性是否初始化 ) 二、lazy 惰性初始化 一、lateinit 延迟初始化 ( ::属性名称.isInitialized...检查属性是否初始化 ) ---- 在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ; 对于...lateinit 延迟初始化属性 , 在使用前可以执行 ::属性名称.isInitialized 检查 , 查看该属性是否进行了初始化操作 ; 代码示例 : class Hello{ lateinit...name 属性值为 Tom 二、lazy 惰性初始化 ---- lazy 惰性初始化属性初始化操作 是 提前定义好的 , 在 调用之前 自动进行初始化操作 , 如果不调用 , 则不进行初始化...; lateinit 延迟初始化属性初始化操作 , 需要 手动进行初始化 , 如果忘了初始化直接调用就会报错 ; 代码示例 : class Hello{ val name by lazy

1.2K10

Jetpack新成员,一篇文章带你玩转Hilt和依赖注入

首先lateinit是Kotlin中的关键字,和Hilt无关。...这个关键字用于对变量延迟初始化,因为Kotlin默认在声明一个变量时就要对其进行初始化,而这里我们并不想手动初始化,所以要加上lateinit。如果你是用Java开发的话,那么可以无视这个关键字。...根据刚才已学到的知识,最直观的写法就是这样: class Truck @Inject constructor(val driver: Driver) { @Inject lateinit...@Inject lateinit var gasEngine: Engine @BindElectricEngine @Inject lateinit var electricEngine...如果你比较了解ContentProvider的话,应该知道它的生命周期是比较特殊的,它在Application的onCreate()方法之前就能得到执行,因此很多人会利用这个特性去进行提前初始化,详见

2.5K30

「android」摆正姿势,dagger2,从精通到上瘾

,下面都会用目标类一词来指代)中所依赖的其他的类的初始化过程,不是通过手动编码的方式创建,而是通过技术手段可以把其他的类的已经初始化好的实例自动注入到目标类中。...那我们看看这桥梁是怎么工作的: Component需要引用到目标类的实例,Component会查找目标类中用Inject注解标注的属性,查找到相应的属性后会接着查找该属性对应的用Inject标注的构造函数...(这时候就发生联系了),剩下的工作就是初始化属性的实例并把实例进行赋值。...因此我们也可以给Component叫另外一个名字注入器(Injector) component.png 小结下 目标类想要初始化自己依赖的其他类:用Inject注解标注目标类中其他类 用Inject注解标注其他类的构造函数...Provides最终解决第三方类库依赖注入问题 Module中的创建类实例方法用Provides进行标注,Component在搜索到目标类中用Inject注解标注的属性后,Component就会去Module

96330

快刀斩乱码—— Dagger2没有想象的那么难

关于Dagger2这种依赖注入框架的好处在这只简单的提一下 依赖的注入和配置独立于组件之外 依赖对象是在一个独立、不耦合的地方初始化。当初始化方式改变的时候修改的代码少。...2 Dagger2的套路 2.1 最简单的运用 最简单的Dagger2运用只采用两个注解@Inject和@Component即可。因为本身@Inject就自带两个作用。...这个PersonComponent 与纯粹用@Inject方式提供依赖不同,还需要有一个modules属性指向DataModule 。...若存在参数,则从步骤1开始初始化每个参数 若不存在创建类方法,则查找该类型的类中有@Inject标记的构造方法,查看构造方法中是否有参数 若构造方法中无参数,则直接初始化该类实例,一次依赖注入到此结束。...Component有3种组织方式: 依赖方式——一个Component可以依赖一个或多个Component,采用的是@Component的dependencies属性

1K20

Dagger2从懵懂到精通,在线学习那点事儿

MainActivity依赖于MainPresenter,这里要注意的是,使用@Inject时,不能用private修饰符修饰类的成员属性。...这种联系我们可以这样理解,当看到某个类被@Inject标记时,就会到他的构造方法中,如果这个构造方法也被@Inject标记的话,就会自动初始化这个类,从而完成依赖注入。...我们来重新理一遍上面的注入过程,首先弄清楚以下几个概念: @Inject 带有此注解的属性或构造方法将参与到依赖注入中,Dagger2会实例化有此注解的类 @Module 带有此注解的类,用来提供依赖,...(MainActivity activity); } 同时里面声明了一个inject方法,方法参数为ManActivity,用来获取MainActivity实例,以初始化在里面声明的MainPresenter...所以在DaggerMainComponent里主要用来初始化依赖,而真正的将这些依赖于Inject关联起来的就是刚才的MainActivity_MembersInjector类,我们看看这个类里做了什么

63100

Dagger2 Android依赖注入学习笔记

那么如何来使用 Dagger2 呢?我们先来看一下使用 Dagger2 和不使用的区别。 对比 用简单的例子来说明。...我们可以发现MainActivity里没有任何有关aaa的初始化赋值,但是它还是可以调用其get()方法。这样我们就达到了解耦合的目的。...这样一个简单的例子可能看不出 Dagger2 的好处,但是你可以想象一下,如果这个 Activity 里有很多个类似 AAA 这样的类的成员变量,它们都需要初始化,有的初始化还要传参数,那么,这个 Activity...注解介绍 Dagger2中注解有:@Inject, @Component, @Module, @Provides, @Qulifier, @Scope, @Singleten 。...当Dagger2碰到使用@Inject注解的变量时,会去寻找这个变量对应的被@Inject注解的构造函数,把实例构造出来,为变量提供依赖。

64930

轻松学,听说你还没有搞懂 Dagger2

@Inject 给一个类的相应的属性做标记时,说明了它是一个依赖需求方,需要一些依赖。 @Inject 给一个类的构造方法进行注解时,表明了它能提供依赖的能力。...另外,还有一种特殊情况就是,像在 Android 中,MainActivity 这样的代码是我们自己编写的,所以我们可以给相应的属性添加 @Inject 注解,但是 MainActivity 对象的创建却是由...Android Framework 框架决定的,那么,Dagger2 有没有针对这种内部拥有 @Inject 标注的属性,但还没有进行依赖绑定的类的对象进行依赖注入呢?...name = "TestLazy"; } return name; } } 只有调用 TestLazy 实例的 getName() 方法时,name 才会被初始化...(ThirdActivity activity); } 只需要在 @Component 中的 dependencies 属性取值为相应的依赖就可以了。

2K20

Dagger2系列——初识

经过一段时间的纠结和水深火热,终于渐渐领悟了Dagger2,在此分享一下学习心得,希望同样对Dagger2水深火热的你们有点帮助。 接下来会分享一系列Dagger2内容。...-@Inject:需要用@Inject注解的地方主要有3,如下 用于标注需要被实例化的对象 提供实例化对象的构造函数 当类被实例化对象之后,需要马上执行的方法 public class A {...@Inject B b;//需要被实例化的对象 } public class B { @Inject//提供对象的实例化构造函数 public B() { }...@Inject//当构造函数被执行之后,立马执行改方法 public void setPresenter(){ xxx; } } -最关键的是执行编译之后 Dagger2会自动生成很多类文件...DaggerXXX,这里的XXX就是用@Component标注的接口名,比如生成了DaggerAppComponent类文件,该类文件实现了AppComponent接口,并且根据相关的@Module提供的实例进行初始化

48430

带你解析Dagger2

Dagger2具有以下好处: 1) 依赖的注入和配置独立于组件之外,注入的对象在一个独立、不耦合的地方初始化,这样在改变注入对象时,我们只需要修改对象的实现方法,而不用大改代码库。...使用 Dagger2 创建依赖对象,我们就不用手动初始化了。...Dagger2 通过注解来生成代码,定义不同的角色,主要的注解有:@Inject、@Module 、@Component 、@Provides 、@Scope 、@SubComponent 等。...Dagger2注解解释: 接下来介绍Dagger2中的每一个概念: @Inject: 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。...最终我们初始化 component然后调用inject()方法注入成员变量。

68740
领券