首页
学习
活动
专区
圈层
工具
发布

【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )

文章目录 一、Kotlin 自动为成员字段生成 getter 和 setter 方法 二、手动设置成员的 getter 和 setter 方法 三、计算属性 一、Kotlin 自动为成员字段生成 getter...和 setter 方法 ---- 定义 Kotlin 类 , 在 类中 定义成员属性 , 会自动生成 getter 和 setter 方法 ; 在 Kotlin 中定义如下类 , 在其中定义两个字段...结果 如下 : 二、手动设置成员的 getter 和 setter 方法 ---- Kotlin 会为 类中的每个 成员属性 生成一个 field , getter , setter ; field...用于存储 属性数据 , 是由 Kotlin 自动进行定义封装的 , 只有在 getter 和 setter 函数中才能调用 field ; 手动定义 getter 和 setter 方法示例 : class...---- 如果 Kotlin 类中的 某个属性 是 通过计算得到的 , 可以 在该属性的 getter 和 setter 方法中进行计算设置或获取结果 , 不使用 field 属性 ; 下面的 age

4K20

让Python中类的属性具有惰性求值的能力

解决方案 定义一个惰性属性最有效的方法就是利用描述符类来完成它,示例如下: class lazyproperty: def __init__(self, fun): self.fun...一般情况下(我是说一般情况下),访问属性的默认行为是从对象的字典中获取,并沿着一个查找链的顺序进行搜索,比如对于 a.x 有一个查找链,从 a.__dict__['x'] 然后是 type(a)....当一个描述符之定义 __get__() 方法,则它的绑定关系比一般情况下要弱化很多。特别是,只有当被访问的属性不存在对象字典中时,__get__() 才会被调用。...__get__ 这种惰性求值的方法在很多模块中都会使用,比如django中的 cached_property: 使用上与例子一致,如表单中的 changed_data : 讨论 在大部分情况下,让属性具有惰性求值能力的全部意义就在于提升程序性能...所有的 get 操作都必须经由属性的 getter 函数来处理,这比直接在实例字典中查找相应的值要慢一些。

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

    【Kotlin】:: 双冒号操作符详解 ( 获取类的引用 | 获取对象类型的引用 | 获取函数的引用 | 获取属性的引用 | Java 中的 Class 与 Kotlin 中的 KClass )

    一、:: 双冒号操作符 ---- 在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ; 获取的这些引用 , 并不常用 , 都是在 Kotlin...1、获取类的引用 在 Kotlin 中 , 使用 :: 双冒号操作符 获取 类的类型对象引用 代码格式为 : Java或Kotlin类名::class 获取的 Kotlin 类 的 类型对象 的类型...中 类的引用类型 KClass 中 提供了很多有用的属性 , 如 : public actual val simpleName: String?..., 包括 : 获取类的简单名称 获取类的完整名称 创建类的实例对象 获取类的成员字段和方法 获取类的继承关系 KClass 的全类名是 kotlin.reflect.KClass , Class 的全类名是...Class 实例对象 ; 在 Kotlin 语言中 , 需要通过 类名::class.java 获取 Class 实例对象 ; Class 提供了关于 Java 类的一系列功能 , 包括 : 获取类的

    6.8K11

    Kotlin与Java互操作

    : 属性读写 Kotlin可以自动识别Java中的getter/setter函数,而在Java中可以过getter/setter操作Kotlin属性。...可针对 JSR-305 注解编译库,但不需要为库的消费者将注解构件(如 jsr305.jar)指定为编译依赖。Kotlin 编译器可以从库中读取 JSR-305 注解,并不需要该注解出现在类路径中。...属性 Kotlin属性会被编译成以下Java元素: getter方法,其名称通过加前缀get得到; setter方法,其名称通过加前缀set得到(只适用于var属性); 私有字段,与属性名称相同(仅适用于具有幕后字段的属性...包级函数 例如,在org.foo.bar 包内的 example.kt 文件中声明的所有的函数和属性,包括扩展函数, 该 类会编译成一个名为 org.foo.bar.ExampleKt 的 Java 类的静态方法...然而,编译器能够生成一个单一的Java外观类,它具有指定的名称且包含来自于所有文件中具有该名称的所有声明。要生成这样的外观,请在所有的相关文件中使用@JvmMultifileClass注解。

    4.4K30

    Spring中国教育管理中心-Apache Cassandra 的 Spring 数据教程十一

    提供一个全参数构造函数 ——即使你不能或不想将你的实体建模为不可变值,提供一个将实体的所有属性作为参数的构造函数仍然有价值,包括可变的,因为这允许对象映射以跳过属性填充以获得最佳性能。...Kotlin 对象创建 Kotlin 类支持实例化,默认情况下所有类都是不可变的,并且需要显式属性声明来定义可变属性。...Kotlin 数据类的属性填充 在 Kotlin 中,默认情况下所有类都是不可变的,并且需要明确的属性声明来定义可变属性。...Kotlin 覆盖属性 Kotlin 允许声明属性覆盖来改变子类中的属性。...Kotlin 为每个类中的每个属性生成属性访问器(getter 和 setter)。

    2K20

    Kotlin的互操作——Kotlin与Java互相调用

    : ① 属性读写 Kotlin可以自动识别Java中的getter/setter;在Java中可以过getter/setter操作Kotlin属性。...① 属性 Kotlin属性会被编译成以下Java元素: getter方法,其名称通过加前缀get得到; setter方法,其名称通过加前缀set得到(只适用于var属性); 私有字段,与属性名称相同(仅适用于具有幕后字段的属性...② 包级函数 在jqiang.Mutual.Kotlin包内的example.kt文件中声明的所有函数和属性,包括扩展函数,都被编译成一个名为jqiang.Mutual.Kotlin.ExampleKt...然而,编译器能够生成一个单一的Java外观类,它具有指定的名称且包含来自于所有文件中具有该名称的所有声明。要生成这样的外观,请在所有的相关文件中使用@JvmMultifileClass注解。...该字段将具有与底层属性相同的可见性。

    4.6K10

    Android经典实战之Kotlin委托模式和by关键字

    Kotlin 提供了对委托的直接支持,使它在类和属性中使用起来更加简洁和直观。 委托模式简介 在经典的委托模式中,一个类将它的一些行为通过对象组合的方式委托给另一个对象。...Kotlin 通过关键字 by 提供了简单和直接的语法支持,使这种模式更易于实现。 类委托 在 Kotlin 中,可以使用 by 关键字来实现类委托。...Derived 类实现了 Base 接口,并将所有接口中的方法调用委托给了传入的 Base 实例。...MyClass 中的 attribute 属性的 getter 和 setter 委托给了 ExampleDelegate 对象。...总结 类委托:通过 by 关键字,一个类可以将某些行为委托给另一个类来实现。 属性委托:可以使用标准库中的委托(如 lazy、observable),也可以创建自定义的属性委托。

    61010

    Kotlin 的 IDE 插件 2021.1 发布: 性能的提升以及更好的重构支持

    在这次版本更新中,我们发布了一个虽然小但重要的特性,那就是在Variables 视图当中计算自定义属性的值。...之前,在调试会话当中,您只能看到没有自定义 getter 的属性的值,这些属性都有一个 幕后字段(backing field)。...有自定义 getter 的属性不会出现,因为它们被当做了 JVM 上的方法。...在 Kotlin 插件的 2021.1 版本当中,您可以看到所有这样的属性,并且只需要点击属性名后面的 get() 就可以按需计算它们的值。...例如在下面的代码中,IDE 自动添加了()类型: 当您应用了 IDE 的提示以后,您将得到以下代码: 使用类图来检查 Kotlin 的代码结构 新版发布以后,您可以使用 UML 类图来检查

    2.5K30

    Spring认证中国教育管理中心-Spring Data Couchbase教程二

    提供一个全参数的构造函数 ——即使你不能或不想将你的实体建模为不可变值,提供一个将实体的所有属性作为参数(包括可变属性)的构造函数仍然有价值,因为这允许对象映射以跳过属性填充以获得最佳性能。...Kotlin 对象创建 Kotlin 类支持实例化,默认情况下所有类都是不可变的,需要明确的属性声明来定义可变属性。...Kotlin 数据类的属性总体 在 Kotlin 中,默认情况下所有类都是不可变的,并且需要显式的属性声明来定义可变属性。...Kotlin 覆盖属性 Kotlin 允许声明属性覆盖以更改子类中的属性。...Kotlin 为每个类中的每个属性生成属性访问器(getter 和 setter)。

    2.5K50

    Kotlin | 2.Kotlin基础

    "需要转义“\$” 类和属性 类 在Kotlin中,public是默认的可见性,所以你能省略它。...class PersonProperty { // 只读属性:生成一个字段和一个简单的getter val name: String = "kotlin_hahaha" /...* 自定义访问器 * 也可以使用函数返回,实现和性能没有差别,唯一的差别是可读性 * 通常来说: * 如果描述的是类的特征(属性),应该把它声明成属性。...getter get() { return height == width } } Kotlin源码布局:目录和包 1.把类和函数的声明放在包中...字符串模板帮组你避免繁琐的字符串拼接。在变量名称前加上 ? {} 包围一个表达式,来把值注入到字符串中。 值对象类在Kotlin中以简洁的方式表示。 熟悉的if现在是带返回值的表达式。

    95220

    【Kotlin 】Kotlin基础

    引用"$"需要转义“\$” 类和属性 类 在Kotlin中,public是默认的可见性,所以你能省略它。...class PersonProperty { // 只读属性:生成一个字段和一个简单的getter val name: String = "kotlin_hahaha" /...* 自定义访问器 * 也可以使用函数返回,实现和性能没有差别,唯一的差别是可读性 * 通常来说: * 如果描述的是类的特征(属性),应该把它声明成属性。...getter get() { return height == width } } Kotlin源码布局:目录和包 1.把类和函数的声明放在包中...字符串模板帮组你避免繁琐的字符串拼接。在变量名称前加上 $ 前缀或者用 ${} 包围一个表达式,来把值注入到字符串中。 值对象类在Kotlin中以简洁的方式表示。 熟悉的if现在是带返回值的表达式。

    1.1K10

    Kotlin Vocabulary | Kotlin 委托代理

    Kotlin 不仅支持类和属性的代理,其自身还包含了一些内建代理,从而使得实现委托变得更加容易。...为了实现这一目标,Kotlin 提供了一种将大部分工作委托给一个内部 ArrayList 实例并且可以自定义其行为的方式,并为此引入了一个新的关键字: by。 让我们看看类代理的工作原理。...在装饰者模式中,装饰者类与被装饰类使用同一接口。装饰者会持有一个目标类的内部引用,并且包装 (或者装饰) 接口提供的所有公共方法。 在您无法继承特定类型时,委托模式就显得十分有用。...您可以复制粘贴这段逻辑并实现一个自定义 setter,但这样一来,您会发现自己为所有属性编写了完全相同的 setter。...通过使用属性代理,我们可以将 getter 和 setter 委托给属性,从而可以复用代码。 与类代理相同,您可以使用 by 来代理一个属性,Kotlin 会在您使用属性语法时生成代码来使用代理。

    2.2K20

    Better Kotlin

    在 Kotlin 的类中,val 和 var 是用于表示属性是否有 getter/setter: var:同时有 getter 和 setter。 val:只有 getter。...这种情况下,我建议不要自定义 val 属性的 getter 方法。...(birthDay, DateTime.now()) } 这也是 Kotlin 代码约定 中所提到的,当具有下面列举的特点时使用属性,不然更推荐使用函数: 不会抛出异常。...具有 O(1) 的复杂度。 计算时的消耗很少。 同时多次调用有相同的返回值。 因此上面提到的,自定义 getter 方法并随着当前时间的不同而返回不同的值违反了最后一条原则。...访问一个伴生对象的私有常量字段需要经过以下方法: 调用伴生对象的静态方法 调用伴生对象的实例方法 调用主类的静态方法 读取主类中的静态字段 为了访问一个常量,而多花费调用4个方法的开销,这样的 Kotlin

    1.6K20

    Java 反射 VS Kotlin 反射

    // 类中声明的所有构造函数。 public val constructors: Collection> Kotlin 通过::操作符并添加类名来引用构造函数。...获取类自身的 public 的函数(包括从基类继承的、从接口实现的所有 public 函数) public Method getMethod(String name, Class[] parameterTypes...获取类的全部注解 (包括从基类继承的、从接口实现的所有 public 成员变量) public Annotation[] getAnnotations() // 获取类自身声明的全部注解 (包含 public...幕后字段 (backing field) 是 Kotlin 属性自动生成的字段,它只能在当前属性的访问器(getter、setter)内部使用。...KProperty 的扩展属性 javaGetter:返回给定属性的 getter 相对应的 Java 方法实例,如果该属性没有 getter,则返回 null。

    3.1K30

    《Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析

    2.1 词法分析 词法分析是将源程序读入的字符序列,按照一定的规则转换成词法单元(Token)序列的过程。词法单元是语言中具有独立意义的最小单元,包括关键字、标识符、常数、运算符、界符等等。...- 选项与声明:用来定制词法分析器,包括类名、父类、权限修饰符等等,以%开头作为标记 - 词法规则:包括一组正则表达式和动作行为,也就是当正则表达式匹配成功后要执行的代码。...该模块包含了所有的的上下文相关属性的检查,包括对表达式语句、常量、智能转换等上下文相关属性检查。...语义分析器进行了上下文相关属性的检查之后,会生成中间代码,位于org.jetbrains.kotlin.ir模块中。 ?...Kotlin编译器在目标代码生成环节做了很多类似于Java封装的事情,比如自动生成Getter/Setter代码的生成、Companion转变成静态类、修改类属性为final不可继承等等工作。

    1.9K20

    Kotlin 开发中遇到的坑(持续更新)

    在 Kotlin 的类中,val 和 var 是用于表示属性是否有 getter/setter: var:同时有 getter 和 setter。 val:只有 getter。...这种情况下,我建议不要自定义 val 属性的 getter 方法。...(birthDay, DateTime.now()) } 这也是 Kotlin 代码约定中所提到的,当具有下面列举的特点时使用属性,不然更推荐使用函数: 不会抛出异常。...具体原因可以看这篇文章:https://cloud.tencent.com/developer/article/1788617 4.2、bean类继承了父类并在主构造函数中覆盖了父类的属性 使用Gson...解析json时,如果bean类继承了父类并在主构造函数中覆盖了父类的属性,那么会报错:declares multiple JSON fields named name(声明多个名为name的JSON字段

    5.4K02
    领券