zoukankan      html  css  js  c++  java
  • Kotlin 学习(2)

    属性和字段

    1、声明属性

    Kotlin中可以使用var关键字声明可变属性,或者用val关键字声明只读属性,属性的类型在后面,变量名在前面,中间加冒号和空格。

    public class Address {
        public var name: String = ...
        public var street: String = ...
        public var city: String = ...
        public var state: String? = ...
        public var zip: String = ...
    }

    调用的时候与Java一样,通过变量名直接使用一个属性

    fun copyAddress(address: Address): Address {
        val result = Address() // Kotlin不需要使用new关键字
        result.name = address.name
        result.street = address.street
        // ...
        return result
    }

    2、Getter和Setter

    声明属性的完整语法如下,语法中的初始化语句,gettersetter都是可选的

    var <propertyName>: <PropertyType> [= <property_initializer>]
        [<getter>]
        [<setter>]

    如果属性类型可以从初始化语句或者类的成员函数中推断出来,那就可以省去类型,val不允许设置setter函数,因为它是只读的。

    var allByDefault: Int? // 错误: 需要一个初始化语句, 默认实现了 getter 和 setter 方法
    var initialized = 1 // 类型为 Int, 默认实现了 getter 和 setter
    val simple: Int? // 类型为 Int ,默认实现 getter ,但必须在构造函数中初始化
    val inferredType = 1 // 类型为 Int 类型,默认实现 getter

    可以自定义访问器(getter)和自定义settersetter的参数名默认是value,也可以自定义

    val isEmpty: Boolean
        get() = this.size == 0
    
    var stringRepresentation: String
        get() = this.toString()
        set (value) {
            setDataFormString(value) // 格式化字符串,并且将值重新赋值给其他元素
        }

    如果需要设置访问器的可见性或者设置注解,又不改变原来的实现,则可以设置一个不带函数的访问器

    var setterVisibility: String = "abc" // 非空类型必须初始化
        private set // setter是私有的并且有默认的实现
    
    var setterWithAnnotation: Any? = null // 设置为可空
        @Inject set // 用 Inject 注解 setter
  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/chhom/p/9009051.html
Copyright © 2011-2022 走看看