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

网站托管哪家公司好编辑网站用什么软件

网站托管哪家公司好,编辑网站用什么软件,软文广告属于什么营销,深圳有名的品牌设计公司1.委托模式 委托模式&#xff1a;操作对象不会去处理某段逻辑&#xff0c;而是会把工作委托给另外一个辅助对象去处理。 例如我们要设计一个自定义类的来实现Set&#xff0c;可以将该实现委托给另一个对象&#xff1a; class MySet<T> (val helperSet: HashSet<T>…

1.委托模式

委托模式:操作对象不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。
例如我们要设计一个自定义类的来实现Set,可以将该实现委托给另一个对象:

class MySet<T> (val helperSet: HashSet<T>) : Set<T> {override val size: Intget() = helperSet.sizeoverride fun isEmpty(): Boolean {return helperSet.isEmpty()}override fun iterator(): Iterator<T> {return helperSet.iterator()}override fun containsAll(elements: Collection<T>) = helperSet.containsAll(elements)override fun contains(element: T) = helperSet.contains(element)override fun contains(element: T) = false  //自己重写该方法来定制功能fun eat() = println("I can eat.")  //新增方法
}

这样就可以让大部分的方法实现调用辅助对象中的方法,少部分的方法实现由自己来重写,甚至加入一些自己独有的方法,那么MySet就会成为一个全新的数据结构类

2.类委托

如上委托模式的代码实现存在一个弊端,如果接口中待实现的方法特别多,那么相应每个都去调用辅助对象中的相应方法实现将会特别复杂
这时候在Kotlin中使用by关键字,再接上受委托的辅助对象,就可以免去之前所写的一大堆模板式的代码了:

class MySet<T>(val helperSet: HashSet<T>) : Set<T> by helperSet {override fun contains(element: T) = false  //自己重写该方法来定制功能fun eat() = println("I can eat.")  //新增方法
}

类委托本质:简化实现委托模式所需要写的很多不必要代码

3.类可以委托给对象的情况

可以的情况:

 a.构造函数中传入
class MyList2(theList: ArrayList<String>) : List<String> by theList {
}
 b.object的属性
class MyList3 : List<String> by theList {object theList : ArrayList<String>()
}
 c.伴生对象中的属性
class MyList4 : List<String> by theList {companion object {val theList: List<String> = ArrayList<String>()}
}
 d.直接创建对象
class MyList6 : List<String> by ArrayList() {
}
 e.调用函数获得对象
fun getDdd() : LinkedList<String> {return LinkedList<String>()
}    class MyList7 : List<String> by getDdd() {
}


不可以的情况:

 a.字段
class MyList : List<String> by theList {  //编译报错,提示:Unresolved reference: theListval theList: List<String> = ArrayList<String>()
}
 b.构造函数中的变量
class MyList8 : List<String> by theList {   //编译报错,提示:Unresolved reference: theListinit {val theList = ArrayList<String>()}
}

4.属性委托

属性委托的核心思想是将一个属性(字段)的具体实现委托给另一个对象去完成
可以看到,这里使用by关键字连接了左边的p属性和右边的Delegate类去完成。当调用p属性的时候会自动调用Delegate的getValue()方法,当给p属性赋值的时候会自动调用Delegate类的setValue()方法

class MyClass {var p by Delegate()
}

Delegate的具体实现:在Delegate类中我们必须实现getValue()和setValue()这两个方法,并且都要使用operator关键字进行声明

class Delegate {var proValue: Any? = null//第一个参数用于声明该Delegate类的委托功能可以在什么类中使用//第二个参数是Kotlin中的一个属性操作类,可用于扩区各种属性相关的值,在当前场景用不着,但必须在方法参数上进行声明//返回值可以声明成【任何类型】,根据具体的实现逻辑去写就可以了operator fun getValue(myClass: MyClass, prop: KProperty<*>) : Any? {return proValue}//前两个参数和getValue()相同//最后一个参数表示具体要赋值给委托属性的值,这个参数类型必须要和getValue()方法返回值的类型保持一致operator fun setValue(myClass: MyClass, prop: KProperty<*>, value: Any?) {proValue = value}
}

现在当我们给p属性赋值时,就会调用Delegate的setValue()方法;当获取p属性的值时,就会调用Delegate类的getValue()方法
如果p属性是使用val关键字声明的,那么就不用在Delegate类中实现setValue()方法,因为它是常量


参考文章:
类声明的右边也能写 by?Kotlin 的接口委托是这么用的

http://www.yayakq.cn/news/553693/

相关文章:

  • 百度优化网站建设景安网络网站建设
  • 对网站建设 意见和建议a站是啥
  • 电子商务网站建设软件选择百度智能建站平台
  • 申请关闭网站开源之家
  • 社交网站建设码fw怎么做网站
  • 做网站的图哪来定做专业营销型网站
  • wordpress第三方用户系统简述影响关键词优化的因素
  • 阎良区建设局网站怎么找平台推广
  • 安卓手机网站源码下载沈阳门户网
  • 苏州住房和城乡建设局网站建设网站是做手机版好还是pc版好
  • 金猪云高端网站建设去掉wordpress
  • 做ppt常用的网站有哪些互联网公司的招聘要求
  • 编程网站哪个好网站风格评价
  • 华夏名网网站管理助手房地产开发公司资质等级
  • 做标签网站网站建设设计企业
  • 网站建设工作自策划实施以来西安搜建站科技网站
  • 网站的开发工具有哪些网站一般多长时间
  • 58做网站建设项目验收网站公示
  • 自适应网站是什么w3school
  • 直播一级a做爰片免费网站值得买 wordpress
  • 建站公司前景网站空间送域名价格表
  • 苏州做网站公司速找苏州聚尚网络秦皇岛城乡住房建设厅网站
  • pos机网站建设方案网站做信息流
  • 网站建设的注意事项照明网站设计
  • 做网站上饶wrix 网站开发
  • 用记事本做网站怎么添加表格企业静态网站
  • 河南做网站最好的公司wordpress文章页个性化设置
  • 黑龙江省建设会计协会网站巴里坤网站建设
  • 企业网站建设采购网站模版上线需要什么意思
  • 权威的唐山网站建设百度扫一扫识别图片在线