kotlin 基础 inline class 18
kotlin.jpeg
在 kotlin 中对 java 进行优化就是将 java 的 class 进行细分为许多不同 class,在 java 每个类有些附加或者者说额外的方法是多数场合是不会被用到的。我们需要不断减轻类的负担。去掉少量额外的方法,从而减少内存分配来提高性能。
inline class Password(val value: String)
inline.jpeg
inline class Animal(val name:String){ val age:Int get() = 5 fun move(){ println("moving...") }}fun main(args: Array<String>) { val zidea = EmployeA.create() println(zidea.name) var password = Password("123") println(password.value) val cat = Animal("miao") println(cat.age) println(cat.name)}inline 类在运行期可以看做一个包装类或者底层类型,底层类型就是相似 int 整型类型
- inline 类不支持 init 方法
- inline 类不支持 backing field
问题来了什么是 backing field 呢,在类中定义一个成员变量,Kotlin 会自动生成默认setter/getter方法。而 Kotlin 提供了一种非常特殊的方式公告setter/getter方法
var name: String? = null set(value) { field = value } get() = field实例化这个类,而后对当前实例的name属性进行赋值并取值。Oops…结果,你会发现,无论是取值还是赋值都出现递归调用。
inline class Animal(val name:String):Imove{ val age:Int get() = ageException in thread "main" java.lang.StackOverflowError at Animal.getAge-impl(ClientC.kt:18) at Animal.getAge-impl(ClientC.kt:18) at Animal.getAge-impl(ClientC.kt:18) at Animal.getAge-impl(ClientC.kt:18)backing field的作用域仅仅存在于当前属性的setter/getter方法中,field 就像绑定了当前属性的一样。因而,我认为翻译成备份属性也许更合适
interface Imove{ fun move()}inline class Animal(val name:String):Imove{ val age:Int get() = 5 override fun move(){ println("moving...") }}inline 类在运行期可以看做一个包装类或者底层类型,底层类型就是相似 int 整型类型
Learn-a-Programming-Language-Step-24.jpg
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » kotlin 基础 inline class 18
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » kotlin 基础 inline class 18