val ... get(){...}在Kotlin

时间:2017-12-25 00:18:04

标签: kotlin

来自Kotlin Koan的问题( https://github.com/Kotlin/kotlin-koans/blob/master/src/ii_collections/n16FlatMap.kt),我有这个Koan代码。我怎么读这个?它看起来像val的变量,但它是一个(){}的函数。

val Customer.orderedProducts: Set<Product> get() {
    // Return all products this customer has ordered
    todoCollectionTask()
}

2 个答案:

答案 0 :(得分:3)

它是一个只读的计算扩展属性。调用get方法来计算值。

因此可以使用:

yourCustomer.orderedProducts.first()
               // ^ You're implicitly calling the get() method.

答案 1 :(得分:0)

似乎有机会将会员作为财产处理。在这个例子中,我可以从Customer.orderedProducts属性中获取字符串。

data class Customer(val name: String, val orders: List<String>)

val Customer.orderedProducts: String get() {
    return this.orders.joinToString()
}

fun main(args: Array<String>) {
    val c = Customer("hello", arrayListOf("A", "B"))
    println(c.orderedProducts)
    println(c.orders)
}

这些是输出值。

A, B
[A, B]