csdn: http://blog.csdn.net/w15321970103/article/details/72758284
类成员
- 构造函数和初始化块
- 函数
- 属性
- 嵌套类和内部类
- 对象声明
属性
声明属性 :Kotlin的类可以有属性。 var 声明为可变的,val为只读的
声明一个属性的完整语法是
var <属性名称>[: <属性类型>] [= <初始值>]
[<getter>]
[<setter>]
//例如
class Address {
var name: String = ……
var street: String = ……
var city: String = ……
var state: String? = ……
var zip: String = ……
}
其初始值、getter 和 setter 都是可选的。属性类型如果可以从初始器 (或者从其 getter 返回值,如下文所示)中推断出来,也可以省略。
var initialized = 1 // 类型 Int、默认 getter 和 setter
我们可以编写自定义的访问器,非常像普通函数,刚好在属性声明内部。
//这里有一个自定义 getter 的例子:
val isEmpty: Boolean
//可以理解为get()方法 = 语句(this.size == 0 结果是true或false再把结果赋值给get()方法)
get() = this.size == 0
//一个自定义的 setter 的例子:
var stringRepresentation: String
get() = this.toString()
set(value) {
setDataFromString(value) // 解析字符串并赋值给其他属性
}
-
按照惯例,setter 参数的名称是 value,可以选择一个不同的名称。
-
自 Kotlin 1.1 起,如果可以从 getter 推断出属性类型,则可以省略属性类型:
// 从结果(this.size == 0)可以知道结果是boolean值 所以省略了属性的数据类型 isEmpty是属性的名称
val isEmpty get() = this.size == 0
如果你需要改变一个访问器的可见性或者对其注解,但是不需要改变默认的实现, 你可以定义访问器而不定义其实现:
var setterVisibility: String = "abc"
private set // 此 setter 是私有的并且有默认实现
var setterWithAnnotation: Any? = null
@Inject set // 可以用 Inject 注解此 setter
访问属性的方式 :名称.属性名称
//一个函数中的参数是Address类型的名称为address
fun copyAddress(address: Address): Address {
//创建一个Address类型的对象名为result的引用
//注意:Kotlin中没有“new”关键字
val result = Address()
result.name = address.name // 将调用访问器
result.street = address.street
// ……
return result
}
嵌套类
类可以嵌套在其他类中
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
内部类
类可以标记为 inner 以便能够访问外部类的成员。内部类会带有一个对外部类的对象的引用:
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
匿名内部类
使用对象表达式创建匿名内部类实例:
window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ……
}
override fun mouseEntered(e: MouseEvent) {
// ……
}
})
如果对象是函数式 Java 接口(即具有单个抽象方法的 Java 接口)的实例, 你可以使用带接口类型前缀的lambda表达式创建它:
val listener = ActionListener { println("clicked") }








网友评论