Kotlin(一)属性讲解

自定义访问器
这-节将向你展示怎样写一个属性访问器的自定义实现。假设你声明这样一个 矩形,它能判断自己是否是正方形。 不需要一个单独的字段来存储这个信息(是否 是正方形),因为可以随时通过检查矩形的长宽是否相等来判断 :

 class Rectangle(val height: Int, val width: Int) {     //
        val isSquare: Boolean
            get() {                           //声明属性的getter方法
                return height == width
            }
    }
    

属性 isSquare 不需要宇段来保存它的值。它只有一个自定义实现的 getter。 它的值是每次访问属性的时候计算出来的。 注意,不需要使用带花括号的完整语法,也可以这样写 get () = height == width。对这个属性的调用依然不变 :

 用法如下:
 val rectangle = Rectangle(41, 43)
 println(rectangle.isSquare)

打印:false


    

转载于:https://my.oschina.net/u/2995989/blog/2239973

Kotlin中,每个类都可以有一个伴生对象。伴生对象是与类绑定在一起的对象,可以访问类的所有成员,包括私有成员。伴生对象可以访问类的私有构造函数和属性,因此可以用来实现工厂方法。下面详细讲解Kotlin中伴生对象的使用。 ### 创建伴生对象 在Kotlin中,我们使用`companion object`关键字来创建伴生对象。伴生对象可以有一个可选的名称,如果没有指定名称,则默认名称为`Companion`。 ```kotlin class MyClass { companion object { // ... } } ``` ### 访问伴生对象 我们可以通过类名来访问伴生对象的成员,就像访问静态成员一样。 ```kotlin MyClass.Companion.someMethod() ``` 或者,我们可以省略`Companion`名称。 ```kotlin MyClass.someMethod() ``` ### 伴生对象的初始化 伴生对象可以拥有自己的初始化代码块,就像类一样。 ```kotlin class MyClass { companion object { init { // 初始化代码 } } } ``` ### 使用伴生对象实现工厂方法 伴生对象常用于实现工厂方法。我们可以在伴生对象中定义一个工厂方法来创建类的实例。 ```kotlin class MyClass private constructor(val value: Int) { companion object { fun create(): MyClass { return MyClass(42) } } } ``` 在上面的例子中,我们定义了一个私有构造函数,然后在伴生对象中定义了一个工厂方法`create()`来创建类的实例。由于构造函数是私有的,因此不能直接使用`MyClass()`来创建类的实例,只能通过`MyClass.create()`来创建类的实例。 ### 伴生对象的扩展 我们可以在伴生对象中定义扩展函数,就像在类中定义扩展函数一样。 ```kotlin class MyClass { companion object { fun create(): MyClass { return MyClass(42) } } } fun MyClass.Companion.someExtension() { // ... } ``` 上面的代码中,我们在伴生对象中定义了一个工厂方法`create()`和一个扩展函数`someExtension()`。我们可以通过类名来调用这些方法,例如`MyClass.create()`和`MyClass.someExtension()`。 ### 总结 Kotlin中的伴生对象是与类绑定在一起的对象,可以访问类的所有成员,包括私有成员。伴生对象可以用于实现工厂方法、定义扩展函数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值