Kotlin 学习笔记

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是在类第一次加载时执行


构造方法

(待续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基本数据类型 和java类似,首字母大写 Type BitWidthDouble 64Float ...
    王岩_shang阅读 3,945评论 0 2
  • 项目未来可能需要使用kotlin开发,所以特此记录一下学习笔记,仅供参考,方便后期查询。已同步到GitHub上:K...
    下位子阅读 7,164评论 7 17
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,356评论 9 118
  • 未完待续······太监直播吃电脑(●'◡'●) 一.基础操作符、语法、定义等 val --> 常量 ; var...
    blink_dagger阅读 3,375评论 1 1
  • 关键字:var:定义变量val:定义常量fun:定义方法Unit:默认方法返回值,类似于Java中的void,可以...
    x小明阅读 3,994评论 0 0