data关键字
data class Leaf(val size: String,val color: String,val shape: String,val vein: Int)
data class Leaf(val size: String,val color: String,val shape: String,val vein: Int)
fun main(args: Array<String>) {
val leaf = Leaf("20","green","cicle",57)
val size = leaf.size
val color = leaf.color
val shape = leaf.shape
val vein = leaf.vein
println("大小:$size 颜色: $color 形状 $shape 叶子数: $vein")
}
data class Leaf(val size: String,val color: String,val shape: String,val vein: Int)
fun main(args: Array<String>) {
val leaf = Leaf("20","green","cicle",57)
val(size,color,shape,vein) = leaf
println("大小:$size 颜色: $color 形状 $shape 叶子数: $vein")
}
componentN函数群会按声明顺序对应于所有属性
上面的代码我们可以看到结构出来的变脸可以直接拿来用,比如数据体Leaf中的size属性,componentN函数群会按照数据体Leaf中属性声明的顺序,从component1到component4和size、color、shape、及vein一一对应。
sealed class SealedExpr()
在实际开发中,用到内部类的地方是很多的。比如说:
上面提到的两种情况,是在开发中最常见的。当然说到内部类,就必须提到另一个概念,嵌套类,所谓嵌套类:即指一个类可以嵌套在其他类中。
例如:
class Other{ // 外部类
val numOuther = 1
class Nested { // 嵌套类
fun init(){
println("执行了init方法")
}
}
}
fun main(args: Array<String>) {
Other.Nested().init() // 调用格式为:外部类.嵌套类().嵌套类方法/属性
}
注意
声明一个内部类使用inner关键字。 声明格式:inner class 类名(参数){}
class Other{ // 外部类
val numOther = 1
inner class InnerClass{ // 嵌套内部类
val name = "InnerClass"
fun init(){
println("我是内部类")
}
}
}
fun main(args: Array<String>) {
Other().InnerClass().init() // 调用格式为:外部类().内部类().内部类方法/属性
}
*注意
作为一名Android开发者,对匿名内部类都不陌生,因为在开发中,匿名内部类随处可见。比如说Button的OnClickListener,ListView的单击、长按事件等都用到了匿名内部类。 一般的使用方式为定义一个接口,在接口中定义一个方法。
class Other{
lateinit private var listener : OnClickListener
fun setOnClickListener(listener: OnClickListener){
this.listener = listener
}
fun testListener(){
listener.onItemClick("我是匿名内部类的测试方法")
}
}
interface OnClickListener{
fun onItemClick(str : String)
}
fun main(args: Array<String>){
// 测试匿名内部类
val other = Other()
other.setOnClickListener(object : OnClickListener{
override fun onItemClick(str: String) {
// todo
println(str)
}
})
other.testListener()
}