当前位置: 首页 > news >正文

长沙网站开发湖南微联讯点不错wordpress文章字段

长沙网站开发湖南微联讯点不错,wordpress文章字段,南浔城乡建设局网站,遵义网站开发公司电话Kotlin的委托 委托模式是常见的设计模式之一。在委托模式中#xff0c;有两个对象参与处理同一个请求#xff0c;接受请求的对象将请求委托给另一个对象来处理。与Java一样#xff0c;Kotlin也支持委托模式#xff0c;通过关键字by。 类委托 类的委托即一个类中定义的方…Kotlin的委托 委托模式是常见的设计模式之一。在委托模式中有两个对象参与处理同一个请求接受请求的对象将请求委托给另一个对象来处理。与Java一样Kotlin也支持委托模式通过关键字by。 类委托 类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。例如下面的Java实例 class RealPrinter { // the delegatevoid print() {System.out.print(something);} }class Printer { // the delegatorRealPrinter p new RealPrinter(); // create the delegate void print() {p.print(); // delegation} }public class Main {// to the outside world it looks like Printer actually prints.public static void main(String[] args) {Printer printer new Printer();printer.print();} } 可以看到在Java代码中printer 最终其实调用了RealPrinter的方法。用kotlin表示则需要用到by关键字 // 创建接口 interface Base {fun print() }// 实现此接口的被委托的类 class BaseImpl(val x: Int) : Base {override fun print() { print(x) } }// 通过关键字 by 建立委托类 class Derived(b: Base) : Base by bfun main(args: ArrayString) {val b BaseImpl(10)Derived(b).print() // 输出 10 } 在 Derived 声明中by 子句表示将 b 保存在 Derived 的对象实例内部而且编译器将会生成继承自 Base 接口的所有方法, 并将调用转发给 b。 属性委托 属性委托指的是一个类的某个属性值不是在类中直接进行定义而是将其托付给一个代理类从而实现对该类的属性统一管理。 属性委托的具体语法格式如下 val/var 属性名: 类型 by 表达式 · var/val属性类型(可变/只读) · 属性名属性名称 · 类型属性的数据类型 · 表达式委托代理类 by 关键字之后的表达式就是委托, 属性的 get()和set() 方法将被委托给这个对象的 getValue() 和 setValue() 方法。属性委托不必实现任何接口, 但必须提供 getValue() 函数(对于 var属性,还需要 setValue() 函数)。 定义被委托的类 该类需要包含 getValue() 方法和 setValue() 方法且参数 thisRef 为进行委托的类的对象prop 为进行委托的属性的对象。实例如下 import kotlin.reflect.KProperty // 定义包含属性委托的类KProperty是个接口 class PropertyExample {var str: String by Delegate() }// 委托的类 class Delegate {operator fun getValue(thisRef: Any?, property: KProperty*): String {return $thisRef, 这里委托了 ${property.name} 属性}operator fun setValue(thisRef: Any?, property: KProperty*, value: String) {println(--- $thisRef 的 ${property.name} 属性赋值为 $value ---)} } fun main(args: ArrayString) {val example PropertyExample()println(example.str) // 访问该属性调用 Delegate.getValue()example.str Google // 调用 Delegate.setValue()println(example.str) } 对应的控制台输出结果为 这里做一个简单的说明 · thisRef属性的拥有者 · property对属性的描述是 KProperty* 类型或是它的父类 · value属性的值。 标准委托 Kotlin的标准库提供很多工厂方法来实现属性的委托 · 延迟属性Lazy 通过 lazy 我们可以定义一个懒加载的属性该属性的初始化不会再类创建的时候发生而是在第一次用到它的时候赋值。 lazy() 是一个函数, 是接受一个 Lambda 表达式作为参数, 返回一个 Lazy T 实例的函数。其返回的实例可以作为实现延迟属性的委托第一次调用 get() 会执行已传递给 lazy() 的 lamda 表达式并记录结果后续调用 get() 只是返回记录的结果。 下面是kotlin的经典示例 val lazyValue: String by lazy {println( lazyValue print ) // 第一次调用输出第二次调用不执行lazyValue print again }fun main(args: ArrayString) {println(lazyValue) // 第一次执行执行两次输出表达式println(lazyValue) // 第二次执行只输出返回值 } 对应的输出结果为  · 可观察属性Observable observable让属性在发生变动的时候可以被关注的地方观察到。可以用于实现观察者模式。 Delegates.observable() 函数接受两个参数: 第一个是初始化值, 第二个是属性值变化事件的响应器(handler)。 在属性赋值后会执行事件的响应器(handler)它有三个参数被赋值的属性、旧值和新值 import kotlin.properties.Delegatesclass ObserveUser {var name: String by Delegates.observable(初始值) {prop, old, new -println(旧值$old - 新值$new)} }fun main(args: ArrayString) {val user ObserveUser()user.name 第一次赋值user.name 第二次赋值 } 对应控制台输出为 · 属性存储在映射中 常见的用法是在一个映射map里存储属性的值。这种情况经常出现在像解析 JSON 或者做其他动态事情的应用中。这种情况下可以使用映射实例自身作为委托来实现委托属性。 class WebSite(val map: MutableMapString, Any?) {val company: String by mapval url: String by map }fun main(args: ArrayString) {var map:MutableMapString, Any? mutableMapOf(company to 谷歌大法好,url to www.Google.com)val site WebSite(map)println(site.company)println(site.url)println(--------------)map.put(company, 白度全广告)map.put(url, www.baiduu.com)println(site.company)println(site.url)} 对应的输出结果为 局部委托属性 局部变量可以声明为委托属性。比如使用lazy初始化一个局部变量 fun example(computeFoo: () - Foo) {val memoizedFoo by lazy(computeFoo)if (someCondition memoizedFoo.isValid()) {memoizedFoo.doSomething()} } 上述代码中memoizedFoo 变量只会在第一次访问时计算。 如果 someCondition 失败那么该变量根本不会计算。 属性委托的特点 对于只读属性(val属性), 它的委托必须提供一个getValue()函数。该函数接受以下参数 · thisRef —— 必须与属性所有者类型对于扩展属性——指被扩展的类型相同或者是它的超类型 · property —— 必须是类型 KProperty* 或其超类型。 这个函数必须返回与属性相同的类型或其子类型。 对于一个值可变(mutable)属性(var属性),除getValue()函数之外,它的委托还必须再提供一个setValue()函数, 这个函数接受以下参数: · property —— 必须是类型 KProperty* 或其超类型 · new value —— 必须和属性同类型或者是它的超类型。
http://www.hkea.cn/news/14314607/

相关文章:

  • 上海哪里网站备案网站弹出代码
  • 成都网站优化wordpress 无广告视频插件
  • 空间坐标系做图网站市面上做网站多少钱
  • 静态网站分页苏州网站建设 苏州网络推广专家
  • 温州市网站制作多少钱wordpress超酷主题
  • 绍兴网站快速排名优化大连哪家网站公司好
  • wordpress可以仿任何站做网站是要云空间吗
  • 宝应123网站建设网腾讯云服务器安装宝塔教程
  • 上海艺佳建设发展有限公司网站信誉好的盐城网站开发
  • html5 微信网站中国造价工程建设管理协会网站
  • 得实网站建设上海的招聘网站有哪些
  • 做网站什么需要好养老院网站开发背景
  • 网站推广必做工作总结怎么写
  • 中文软件开发工具搜索引擎优化的主要工作有
  • 博学云网站建设软文广告经典案例短的
  • 网站备案个人可以做吗建设银行网站机构特点业务发展
  • 做国际网站的上海高端网站公司饲料 东莞网站建设
  • 自己做网站如何挣钱免费自助建站
  • 镇江房地产网站建设wordpress培训机构主题
  • 杭州萧山区专业做网站的公司工商网上注册营业执照
  • 大学专业宣传网站开发课题意义杭州旅游团购网站建设
  • 单位门户网站怎么制作小程序
  • 仓库管理系统网站建设网站开发项目实例
  • WordPress中文名字叫什么seo基础培训
  • wordpress 3.9网站栏目页 优化
  • 如何介绍自己做的网站wordpress使用hexo主题
  • 中建西部建设广通讯网站网站建站网站网站维护
  • dw建设网站视频河南建设建设监理协会网站
  • 做网站申请多少类商标搜索引擎优化的定义
  • 怎么打开域名网站全国定制网站服务器云主机