官术网_书友最值得收藏!

Objects

We already covered object expressions, but there is more on objects. Objects are natural singletons (by natural, I mean to come as language features and not as behavior pattern implementations, as in other languages). A singleton is a type that has just one and only one instance and every object in Kotlin is a singleton. That opens a lot of interesting patterns (and also some bad practices). Objects as singletons are useful for coordinating actions across the system, but can also be dangerous if they are used to keep global state.

Object expressions don't need to extend any type:

fun main(args: Array<String>) {
val expression = object {
val property = ""

fun method(): Int {
println("from an object expressions")
return 42
}
}

val i = "${expression.method()} ${expression.property}"
println(i)
}

In this case, the expression value is an object that doesn't have any specific type. We can access its properties and functions.

There is one restriction—object expressions without type can be used only locally, inside a method, or privately, inside a class:

class Outer {
val internal = object {
val property = ""
}
}

fun main(args: Array<String>) {
val outer = Outer()

println(outer.internal.property) // Compilation error: Unresolved reference: property
}

In this case, the property value can't be accessed.

主站蜘蛛池模板: 寿阳县| 股票| 德化县| 平阳县| 郴州市| 定州市| 黄石市| 都江堰市| 黄冈市| 吉木萨尔县| 罗定市| 确山县| 修武县| 六枝特区| 阿巴嘎旗| 苏尼特左旗| 黄骅市| 柞水县| 定远县| 肥乡县| 旌德县| 嘉峪关市| 盈江县| 崇阳县| 曲松县| 嘉义县| 峨眉山市| 屏东市| 娄烦县| 城固县| 方山县| 五河县| 广昌县| 临沧市| 兰溪市| 河东区| 获嘉县| 青川县| 乌鲁木齐县| 抚顺市| 定日县|