- Kotlin这语言有一个特点,它直接支持一些特别有用的设计模式在里面,如Kotlin的对象声明(单例),我们今天讲它的另外一种:委托。 在委托设计模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。许多其他设计模式,如状态模式、策略模式、访问者模式实际上也采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。... Kotlin这语言有一个特点,它直接支持一些特别有用的设计模式在里面,如Kotlin的对象声明(单例),我们今天讲它的另外一种:委托。 在委托设计模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。许多其他设计模式,如状态模式、策略模式、访问者模式实际上也采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。...
- Java是没有这一说法的。Kotlin的对象表达式是用来创建匿名类的对象用的。 interface MyInterface { fun bar(); } class Box { fun foo(f:MyInterface){ f.bar() } } var d = Box() // 匿名内部类 d.foo(object: MyInterface{ override ... Java是没有这一说法的。Kotlin的对象表达式是用来创建匿名类的对象用的。 interface MyInterface { fun bar(); } class Box { fun foo(f:MyInterface){ f.bar() } } var d = Box() // 匿名内部类 d.foo(object: MyInterface{ override ...
- 1.概述 Kotlin接口即可以有抽象方法,也可以有实现了的方法。接口与抽象类的区别在于接口不能存在状态。接口还可以有属性,不过这些属性只能是抽象的,或者提供访问器的实现。Kotlin的接口与Java的类似,也是可以多继承的。 接下来我们来看年Kotlin如何定义接口,以及多继承情况下如何解决冲突和Kotlin中的属性有何特别。 2.定义 Kotlin接口与Jav... 1.概述 Kotlin接口即可以有抽象方法,也可以有实现了的方法。接口与抽象类的区别在于接口不能存在状态。接口还可以有属性,不过这些属性只能是抽象的,或者提供访问器的实现。Kotlin的接口与Java的类似,也是可以多继承的。 接下来我们来看年Kotlin如何定义接口,以及多继承情况下如何解决冲突和Kotlin中的属性有何特别。 2.定义 Kotlin接口与Jav...
- Kotlin伴生对象的行为看起来就是Java的static的方法和属性。但它们本质区别还是很大的。 什么是伴生对象呢? 一个在类里面用companion关键字标记的对象声明,这个对象就是伴生对象。 class MyClass { companion object Factory { fun create(): MyClass = MyClass() } } 1... Kotlin伴生对象的行为看起来就是Java的static的方法和属性。但它们本质区别还是很大的。 什么是伴生对象呢? 一个在类里面用companion关键字标记的对象声明,这个对象就是伴生对象。 class MyClass { companion object Factory { fun create(): MyClass = MyClass() } } 1...
- 可见性修饰符 Kotlin有private,protected,internal,public四个修饰符。Kotlin的类、对象、接口、构造函数、函数、属性和它的getters和setters都可以用这些修饰符修饰。如果没有明确指定修饰符,那么它默认就是public。 包 函数、属性、类、对象、接口都可以定义在顶层,即直接定义在包里。 // file name ... 可见性修饰符 Kotlin有private,protected,internal,public四个修饰符。Kotlin的类、对象、接口、构造函数、函数、属性和它的getters和setters都可以用这些修饰符修饰。如果没有明确指定修饰符,那么它默认就是public。 包 函数、属性、类、对象、接口都可以定义在顶层,即直接定义在包里。 // file name ...
- 我们经常创建类,主要目的是为了持有数据。在这样的类中,标准的功能和工具函数从数据中机械推导出来的。这样的类在Kotlin中叫做数据类(data class),用data标记: data class User(val name: String, val age: Int) 1 编译器会自动从在主构造函数中声明的属性推导出以下这些成员来: equals()/hashC... 我们经常创建类,主要目的是为了持有数据。在这样的类中,标准的功能和工具函数从数据中机械推导出来的。这样的类在Kotlin中叫做数据类(data class),用data标记: data class User(val name: String, val age: Int) 1 编译器会自动从在主构造函数中声明的属性推导出以下这些成员来: equals()/hashC...
- Kotlin的嵌套类和内部类都是写在某个类里面,区别在于嵌套类不能访问外部类的成员,如果友嵌套类前加上关键字inner它就会成为一个内部类,这时它就可以访问外部类的成员了。 嵌套类 嵌套类不能访问外部类的成员! class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } ... Kotlin的嵌套类和内部类都是写在某个类里面,区别在于嵌套类不能访问外部类的成员,如果友嵌套类前加上关键字inner它就会成为一个内部类,这时它就可以访问外部类的成员了。 嵌套类 嵌套类不能访问外部类的成员! class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } ...
- Kotlin扩展 Kotlin提供了用一个新的函数来扩展一个类的能力,而不需要继承这个类或用设计模式如装饰者来实现。有了这个能力,我们就可以轻松为那些我们不能改变的第三方包中的类添加功能。为类添加了的函数,可以像类的其他函数一样调用。除了扩展函数外,还可以扩展属性,让你为已存在的类定义新属性。这个Kotlin机制叫扩展函数。 扩展函数 声明一个扩展函数,我们需要在... Kotlin扩展 Kotlin提供了用一个新的函数来扩展一个类的能力,而不需要继承这个类或用设计模式如装饰者来实现。有了这个能力,我们就可以轻松为那些我们不能改变的第三方包中的类添加功能。为类添加了的函数,可以像类的其他函数一样调用。除了扩展函数外,还可以扩展属性,让你为已存在的类定义新属性。这个Kotlin机制叫扩展函数。 扩展函数 声明一个扩展函数,我们需要在...
- Kotlin密封类 密封类被用于展示受限的类层次结构。当一个值可以有一个来自一个有限集合中的类型,但不能有任何其他类型。在某种程度上来说,它们是枚举类的扩展,一个枚举类型的值的集合也是受限的。但每一个枚举常量只作为一个单例存在,而密封类的子类可以有多个实例,这些实例都可以包含状态。 定义一个密封类,你只需将sealed修饰符放在类名之前。一个密封类可以有多个子类,但它... Kotlin密封类 密封类被用于展示受限的类层次结构。当一个值可以有一个来自一个有限集合中的类型,但不能有任何其他类型。在某种程度上来说,它们是枚举类的扩展,一个枚举类型的值的集合也是受限的。但每一个枚举常量只作为一个单例存在,而密封类的子类可以有多个实例,这些实例都可以包含状态。 定义一个密封类,你只需将sealed修饰符放在类名之前。一个密封类可以有多个子类,但它...
- Kotlin属性与字段 Kotlin属性与字段1、声明属性2、Getters和Setters方法3、返回字段4、返回属性5、编译时常量6、延迟初始化的属性和变量7、重写属性8、委托属性9、Kotlin编译器对委托属性的处理10、提供委托 Kotlin属性与字段 1、声明属性 Kotlin类中的属性可以使用var关键字声明为可变的,或者使用val关键... Kotlin属性与字段 Kotlin属性与字段1、声明属性2、Getters和Setters方法3、返回字段4、返回属性5、编译时常量6、延迟初始化的属性和变量7、重写属性8、委托属性9、Kotlin编译器对委托属性的处理10、提供委托 Kotlin属性与字段 1、声明属性 Kotlin类中的属性可以使用var关键字声明为可变的,或者使用val关键...
- Kotlin可以在声明处或使用处解决泛型歧义 声明处解决泛型歧义 一、上界异常 1.Java泛型类 public class Box<T> { } 12 以下赋值是错误的:错误!错误!错误! 编译器会报类型不匹配的错误。 Box<Object> box1 = new Box<Object>(); Box<String... Kotlin可以在声明处或使用处解决泛型歧义 声明处解决泛型歧义 一、上界异常 1.Java泛型类 public class Box<T> { } 12 以下赋值是错误的:错误!错误!错误! 编译器会报类型不匹配的错误。 Box<Object> box1 = new Box<Object>(); Box<String...
- Kotlin Demo 使用Kotlin实现了电子签名,用Kotlin写Android应用真是舒服。 我自定义了一个SignatureView: package com.wong.testp import android.annotation.SuppressLint import android.content.Context import android.gra... Kotlin Demo 使用Kotlin实现了电子签名,用Kotlin写Android应用真是舒服。 我自定义了一个SignatureView: package com.wong.testp import android.annotation.SuppressLint import android.content.Context import android.gra...
- is操作符检查表达式是否是某一个类型的实例。如果一个不可修改的本地变量或属性被检查特定类型,不需要显式地强制转换: fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj`自动转换为`String`在这个分支 return obj.length } // 在类型检查分支外的`obj... is操作符检查表达式是否是某一个类型的实例。如果一个不可修改的本地变量或属性被检查特定类型,不需要显式地强制转换: fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj`自动转换为`String`在这个分支 return obj.length } // 在类型检查分支外的`obj...
- 条件表达式 如果Kotlin的条件语句(if语句)中只是做赋值操作而已,那么IDE会提示: Return should be lifted out of 'if' 其实就是建议你用条件表达式。 如果下面这个方法: fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { retu... 条件表达式 如果Kotlin的条件语句(if语句)中只是做赋值操作而已,那么IDE会提示: Return should be lifted out of 'if' 其实就是建议你用条件表达式。 如果下面这个方法: fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { retu...
- Kotlin类与继承、抽象类、嵌套类、内部类、匿名内部类、伴生对象、对象声明、对象表达式 定义属性主构造器次构造函数Kotlin 中没有 new 关键字抽象类内部类嵌套类匿名内部类类的修饰符继承重写方法重写属性派生类的初始化顺序调用超类实现重写的规则伴生对象对象声明对象表达式对象表达式和对象声明之间的语义差异 定义 与Java一样,使用class关键... Kotlin类与继承、抽象类、嵌套类、内部类、匿名内部类、伴生对象、对象声明、对象表达式 定义属性主构造器次构造函数Kotlin 中没有 new 关键字抽象类内部类嵌套类匿名内部类类的修饰符继承重写方法重写属性派生类的初始化顺序调用超类实现重写的规则伴生对象对象声明对象表达式对象表达式和对象声明之间的语义差异 定义 与Java一样,使用class关键...
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢
2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考
2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本
2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签