美文网首页
Kotlin 学习笔记

Kotlin 学习笔记

作者: 小面包屑 | 来源:发表于2017-11-02 16:19 被阅读0次

var 和 val (Declaring Properties)

val and var are the two keywords you can use to declare variables (and properties). The difference is that using val gives you a read-only variable, which is the same as using the final keyword in Java.

val 和 var 都是声明变量的关键字。不同点在于val 是只读变量,相当于java中的final变量,因此创建的时候必须初始化。

var x = 10    // int x = 10;
val y = 25    // final int y = 25;

Objects

参考:http://www.jianshu.com/p/ba3d13581a06

1、Object expression(对象表达式)

在Android里面,我们对一些点击事件的监听的时候,会使用到匿名内部类
而在Kotlin中,就用对象表达式来替换匿名内部类,是这样子来写的

fab.setOnClickListener(
            object : View.OnClickListener {
                override fun onClick(v: View?) {
                } 
            })
// 上面可以使用Lambdas简写成
// fab.setOnClickListener( View.OnClickListener { })

如果父类有构造函数,则必须传递相应的构造函数。多个父类可以用逗号隔开,写在冒号后面

open class A(x: Int) {
    public open val y: Int = x
}
interface B {...}
val ab: A = object : A(1), B {
    override val y = 15
}

当只需要一个对象just an object,没有父类的情况下

val adHoc = object {
    var x: Int = 0
    var y: Int = 0
}
print(adHoc.x + adHoc.y)

就像Java的匿名内部类一样,对象表达式中的代码可以访问封闭范围的变量。

fun countClicks(window: JComponent) {
    var clickCount = 0 // 如果是Java的话这里要加上final
    var enterCount = 0 // 这里也是
    window.addMouseListener(object : MouseAdapter() {
        override fun mouseClicked(e: MouseEvent) {
            clickCount++
        }
        override fun mouseEntered(e: MouseEvent) {
            enterCount++
        }
    })
    // ...
}

与Java不同,封闭范围的变量不需要声明为final

2、Object declarations(对象声明)

object DataProviderManager {
    fun registerDataProvider(provider: DataProvider) {
        // ...
    }

    val allDataProviders: Collection<DataProvider>
        get() = // ...
}

这样的代码称为一个 对象声明(object declaration), 在 object 关键字之后必须指定对象名称

注意: 对象声明不可以是局部的(也就是说, 不可以直接嵌套在函数之内), 但可以嵌套在另一个对象声明之内, 或者嵌套在另一个非内部类(non-inner class)之内.

3、Companion Objects(伴生对象)

Kotlin允许我们去定义一些行为与静态对象一样的对象。尽管这些对象可以用众所周知的模式来实现,比如容易实现的单例模式。
我们需要一个类里面有一些静态的属性、常量或者函数,我们可以使用companion objecvt。这个对象被这个类的所有对象所共享,就像Java中的静态属性或者方法。


Object expression是马上执行的
Object declaration是lazy的,在第一次使用时执行
Companion Object是在类第一次加载时执行


构造方法

(待续)

相关文章

网友评论

      本文标题:Kotlin 学习笔记

      本文链接:https://www.haomeiwen.com/subject/qlgacxtx.html