📜  科特林 |类属性和自定义访问器

📅  最后修改于: 2022-05-13 01:55:46.961000             🧑  作者: Mango

科特林 |类属性和自定义访问器

类的基本和最重要的思想是封装。它是将代码和数据封装到单个实体中的属性。在Java中,数据存储在字段中,这些字段大多是私有的。因此,提供了访问器方法——一个getter和一个setter来让给定类的客户端访问数据。为了发送有关更改的通知或验证传递的值,setter 中还存在其他逻辑。

财产

在Java的情况下,它是附件和字段的组合。对于 Kotlin,属性是一流的语言特性。这些功能替换了字段和访问器方法。类中的属性声明与使用valvar关键字声明变量相同。声明为 var 的属性是可变的,因此可以更改。

定义一个类:

Kotlin
class Abc(
    val name: String,
    val ispassed : Boolean
)


Kotlin
class Abc(
    val name: String,
    val ispassed : Boolean
)
 
fun main(args: Array) {
 
    val abc = Abc("Bob",true)
    println(abc.name)
    println(abc.ispassed)
 
    /*
    In Java
    Abc abc = new Abc("Bob",true);
    System.out.println(person.getName());
    System.out.println(person.isMarried());
 
    */
}


Kotlin
class Rectangle(val height: Int, val width: Int)
{
    val isSquare: Boolean
        get() {
            return height == width
        }
}
  
fun main(args: Array) {
  
    val rectangle = Rectangle(41, 43)
    println(rectangle.isSquare)    
}


可读属性:生成一个字段和一个普通的 getter
可写属性: getter、setter 和字段

基本上发生的情况是属性的声明声明了相关的访问器(setter 和 getter 用于可写,getter 用于可读属性)。字段存储值。

让我们看看类的用法

科特林

class Abc(
    val name: String,
    val ispassed : Boolean
)
 
fun main(args: Array) {
 
    val abc = Abc("Bob",true)
    println(abc.name)
    println(abc.ispassed)
 
    /*
    In Java
    Abc abc = new Abc("Bob",true);
    System.out.println(person.getName());
    System.out.println(person.isMarried());
 
    */
}

输出:

Bob
true

在 Kotlin 中,可以在没有new关键字的情况下调用构造函数。不是调用 getter,而是直接引用该属性。逻辑保持不变,代码更加简洁。可变属性的设置器以类似的方式工作。

客户访问者

属性访问器的自定义实现。

科特林

class Rectangle(val height: Int, val width: Int)
{
    val isSquare: Boolean
        get() {
            return height == width
        }
}
  
fun main(args: Array) {
  
    val rectangle = Rectangle(41, 43)
    println(rectangle.isSquare)    
}

输出:

false

属性isSquare不需要字段来存储值。它只有一个带有提供实现的自定义getter 。每次访问该属性时,都会计算该值。