首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 基础 | 委托及其应用

委托是常见的模式,它和编程语言无关,即把本来自己做的事情委托给另一个对象去做。装饰者模式和代理模式都通过委托复用了行为。...Kotlin 在语言层面支持了委托,这一篇结合实例介绍一下 Kotlin委托。...使用by的好处是消灭模板代码,就如上面所示,type()接口的实现就可以省略。 惰性初始一次 惰性初始也是一种常见的模式:延迟对象的初始,直到第一次访问它。...对于 var 修饰的读写变量进行属性委托时,被委托对象必须实现getValue()和setValue()接口,即定义如何读写变量值。...它们都通过关键词by进行委托。 类委托可以用简洁的语法将类的实现委托给另一个对象,以减少模板代码。 属性委托可以将对属性的访问委托给另一个对象,以减少模板代码并隐藏访问细节。

92830
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin修炼指南(五)—Delegates

委托,是一种比较常见的设计模式,通常采用接口或者抽象类的方式实现,在Java代码中,一般使用接口进行封装,而在kotlin中,可以通过委托机制实现更加方便的委托模式。...类委托入门 在一般的业务开发中,我们经常会遇到这样的场景——一个业务功能,有多种实现,通过接口封装具体的业务方法,通过实现接口完成不同实现,这样的场景有很多,使用Kotlin实现这一功能,步骤如下...类委托的原理 通过反编译Kotlin实现的代码,可以很方便的了解Kotlin内部是如何通过Java代码实现委托机制的。 ?...青铜:抽取公共函数,在处理时对属性进行调用 黄金:重新属性的get、set函数,将逻辑封装 王者:使用属性委托,将逻辑抽取出来 下面再通过一个实例演示下这个步骤。...通过上面的这些操作,就将Fragment参数传递的代码简化到了只有一行,其它任何的Fragment传参,都可以使用这个委托委托操作实例 最后,再介绍一些官方推荐的委托使用场景。

75520

是时候使用Kotlin编程了

4,IDE工具支持 在Google官方发布的最新版本的Android Studio 3.0上,已经默认集成了Kotlin,对于一些老版本,也可以通过插件的方式集成Kotlin。...Kotlin如何兼容Java的 都是Kotlin可以100%的兼容Java,那么Kotlin又是如何兼容Java的呢?下面是Kotlin的一个编译流程图。...例如: 当然,也可以直接在声明类的时候指定构造函数,对象实例可以不写new关键字。...在Kotlin使用Java的反射的实例如下: jc返回的是Java的class对象,可以通过这个对象去调用调用Java的反射内容。 Kotlin中的反射如下。...当然,读者可以通过Kotlin/Native的一款游戏源码学习Kotlin Native:https://github.com/jetbrains/kotlinconf-spinner 学习资料 当然

3.2K10

用 TensorFlow Lite 在安卓系统上实现即时人体姿态跟踪

PoseNet是一种视觉模型通过检测关键身体部位的位置估计人在图像或视频中的姿势。例如,模型可以估计一个人的肘部和/或膝盖在图像中的位置。...在谷歌I/O ‘ 19上,TensorFlow Lite展示了一款名为Dance Like的应用程序,它可以帮助用户学习如何使用PoseNet模型跳舞。...为了使姿态渲染与摄像机帧同步,输出显示使用了单个SurfaceView,而不是单独的姿态和摄像机视图实例。...SurfaceView通过视图画布上获取、锁定和绘制确保将surface毫不延迟地放到屏幕上。...在未来,我们希望为这个示例应用探索更多的功能,包括: 1、Multi-pose估计 2、GPU加速与GPU委托 3、使用NNAPI委托加速NNAPI 4、训练后的量化模型,以减少延迟 5、附加的模型选项

3.6K30

Kotlin Vocabulary | Kotlin 委托代理

为了实现这一目标,Kotlin 提供了一种将大部分工作委托给一个内部 ArrayList 实例并且可以自定义其行为的方式,并为此引入了一个新的关键字: by。 让我们看看类代理的工作原理。...当您使用 by 关键字时,Kotlin 会自动生成使用 innerList 实例作为代理的代码: class ListWithTrash (private val innerList: MutableList...工作原理 让我们看看这一切是如何工作的。...通过使用属性代理,我们可以将 getter 和 setter 委托给属性,从而可以复用代码。 与类代理相同,您可以使用 by 代理一个属性,Kotlin 会在您使用属性语法时生成代码来使用代理。...代理可以帮您将任务委托给其他对象,并提供更好的代码复用性。Kotlin 编译器会创建代码以使您可以无缝使用代理。Kotlin 使用简单的 by 关键字语法代理属性或类。

1.9K20

Gradle Kotlin DSL指南

例如,你可以通过configurations.implementation获得实现配置。 Kotlin DSL用使用插件提供的模型元素的类型安全的模型访问器取代了这种动态解析。...如果您找不到类型安全的访问器,那么就回退到使用对应类型的普通API。为此,您需要知道配置的模型元素的名称和/或类型。现在,我们将向您展示如何通过详细查看上面的脚本来发现它们。...您可以通过查看应用插件的文档或运行gradle kotlinDslAccessorsReport发现可用的扩展和约定,该报告打印了访问所有应用插件提供的模型元素所必需的Kotlin代码。...Gradle API通过名称和类型引用任务,而不是使用访问器。...如果您需要一个容器元素的引用,可以在构建的其他地方使用,那么这些参数特别有用。此外,Kotlin委托属性可以通过IDE重构轻松地重命名。

9.8K20

Kotlin委托的深入解析与实践

本文将深入探讨Kotlin中的委托机制,介绍其原理、具体使用方式以及实际应用场景。 委托的原理 委托是一种通过将实际工作委托给其他对象实现代码重用的机制。...在Kotlin中,委托通过关键字 by 实现。我们将首先了解委托的基本原理,为后续的实例打下基础。 基本语法 Kotlin中的类可以通过关键字 by 委托给其他类。...具体使用示例 接下来,我们将通过实际的示例演示Kotlin委托的具体使用方式。我们将使用委托实现属性的延迟初始,这是委托的一个常见用法。...lazy 委托实现延迟初始。...结论 通过本文的学习,我们深入了解了Kotlin委托的原理和使用方式。委托不仅能够提高代码的可维护性,还能在实际应用中发挥重要作用。

18130

Kotlin入门(28)Application单例

同样的单例过程通过Kotlin编码实现的话,静态属性和静态方法可利用伴生对象实现,这样就形成了Kotlin单例的第一种方式:手工声明属性的单例,具体描述见下。...一、手工声明属性的单例 该方式与Java的常见做法一致,也是手工声明自身类的静态实例,然后通过静态方法返回自身实例。...与Java的不同之处在于:Kotlin引入了空安全机制,故而静态属性要声明为可空变量、然后获得实例时要在末尾加上双感叹号表示非空,当然也可事先将自身实例声明为延迟初始属性。...    } } 二、借助Delegates的委托属性单例 第一种方式的单例,虽然提供了两种属性的声明手段,但只是为了保证自身实例的非空性。...利用Delegates工具的属性代理功能,就构成了Kotlin的第二种单例方式;有关委托属性和属性代理的介绍,可参见前面的博文《Kotlin入门(25)共享参数模板》。

2.2K30

Kotlin的5种单例模式

如果你需要写一个可以无需用一个类的实例调用,但需要访问类内部的函数(例如,工厂方法,单例等),你可以把该类声明为一个对象。该对象与其他语言的静态成员是类似的。...} } } 上述代码中,我们可以发现在Kotlin实现中,我们让其主构造函数私有并自定义了其属性访问器,其余内容大同小异。 如果有小伙伴不清楚Kotlin构造函数的使用方式。...} } } 大家都知道在使用懒汉式会出现线程安全的问题,需要使用使用同步锁,在Kotlin中,如果你需要将方法声明为同步,需要添加@Synchronized注解。...Lazy接口 SynchronizedLazyImpl实现了Lazy接口,Lazy具体接口如下: public interface Lazy { //当前实例对象,一旦实例后...,该对象不会再改变 public val value: T //返回true表示,已经延迟实例过了,false 表示,没有被实例, //一旦方法返回true,该方法会一直返回

1.1K00

iOS 常用设计模式汇总

例如,模型对象可能是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。...模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。 1.1.2视图对象 视图对象是应用程序中用户可以看见的对象。...视图对象知道如何将自己绘制出来,并可能对用户的操作作出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。尽管如此,在 MVC 应用程序中,视图对象通常与模型对象分离。...1.1.3控制器对象 在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。...4.5注意事项 确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。 java,C++中使其没有公有构造函数,私有并覆盖其构造函数。

1.7K10

Kotlin中的5种单例模式示例详解

如果你需要写一个可以无需用一个类的实例调用,但需要访问类内部的函数(例如,工厂方法,单例等),你可以把该类声明为一个对象。该对象与其他语言的静态成员是类似的。...} } } 上述代码中,我们可以发现在Kotlin实现中,我们让其主构造函数私有并自定义了其属性访问器,其余内容大同小异。 如果有小伙伴不清楚Kotlin构造函数的使用方式。...} } } 大家都知道在使用懒汉式会出现线程安全的问题,需要使用使用同步锁,在Kotlin中,如果你需要将方法声明为同步,需要添加**@Synchronized**注解。...Lazy接口 SynchronizedLazyImpl实现了Lazy接口,Lazy具体接口如下: public interface Lazy<out T { //当前实例对象,一旦实例后,...该对象不会再改变 public val value: T //返回true表示,已经延迟实例过了,false 表示,没有被实例, //一旦方法返回true,该方法会一直返回true,且不会再继续实例

2.3K41

Kotlin开发笔记之委托属性与区间(译)

委托实例 在上面的例子中,创建了一个新的委托实例实现属性。...:当委托是无状态,并且它所需要的唯一变量就是已经提供好的包含对象实例委托名称时,可以通过将其声明为 object 替代 class 实现一个单例委托。...Kotlin 已经提供了内置的扩展方法允许将 Map and MutableMap 实例用作委托,属性名作为其中的键。...如果你选择复用相同的局部委托实例在一个类中实现多属性,你需要在构造函数中初始实例。 注意:从 Kotlin 1.1 开始,也可以声明 方法局部变量声明为委托属性。...这是 Kotlin 1.1 编译器可以优化的一个点。至少通过这些特定的区间类避免了装箱操作。 说明:尽量在使用时直接声明非空基本类型的区间,不要间接调用,避免额外区间类的创建。

64710

Kotlin下的5种单例模式

如果你需要写一个可以无需用一个类的实例调用,但需要访问类内部的函数(例如,工厂方法,单例等),你可以把该类声明为一个对象。该对象与其他语言的静态成员是类似的。...} } } 上述代码中,我们可以发现在Kotlin实现中,我们让其主构造函数私有并自定义了其属性访问器,其余内容大同小异。 如果有小伙伴不清楚Kotlin构造函数的使用方式。...} } } 大家都知道在使用懒汉式会出现线程安全的问题,需要使用使用同步锁,在Kotlin中,如果你需要将方法声明为同步,需要添加@Synchronized注解。...Lazy接口 SynchronizedLazyImpl实现了Lazy接口,Lazy具体接口如下: public interface Lazy { //当前实例对象,一旦实例后...,该对象不会再改变 public val value: T //返回true表示,已经延迟实例过了,false 表示,没有被实例, //一旦方法返回true,该方法会一直返回

1.4K10

Kotlin | 4.类、对象和接口

本章内容包括: 类和接口 非默认属性和构造方法 数据类 类委托 使用 object 关键字 1、定义类继承结构 /*--------------- 4.1.1 kotlin 中的接口...Kotlin -> by 类委托 /**------------------------- 4.3.3 类委托使用“by”关键字 -------------------------*...使用 inner 关键字存储外部类的引用。 sealed 类的子类只能嵌套在自身的声明中(Kotlin 1.1 允许将子类放置在同一文件的任意地方)。...初始语句块和从构造方法为初始实例提供了灵活性 使用 field 标识符在访问器方法体中引用属性的支持字段 数据类提供了编译器生成的 equals hashCode toString copy 和其他方法...类委托帮助避免在代码中出现许多相似的委托方法。 对象声明是Kotlin 中定义单例类的方法。

90510

Kotlin委托属性和区间

委托实例 在上面的例子中,创建了一个新的委托实例实现属性。...:当委托是无状态,并且它所需要的唯一变量就是已经提供好的包含对象实例委托名称时,可以通过将其声明为 object 替代 class 实现一个单例委托。...Kotlin 已经提供了内置的扩展方法允许将 Map and MutableMap 实例用作委托,属性名作为其中的键。...如果你选择复用相同的局部委托实例在一个类中实现多属性,你需要在构造函数中初始实例。 注意:从 Kotlin 1.1 开始,也可以声明 方法局部变量声明为委托属性。...这是 Kotlin 1.1 编译器可以优化的一个点。至少通过这些特定的区间类避免了装箱操作。 说明:尽量在使用时直接声明非空基本类型的区间,不要间接调用,避免额外区间类的创建。

1.3K70
领券