Kotlin学习笔记 入门篇

1. var/val/lateinit

这三个关键字是在宣告参数时最常用到的几个,常看到的写法如下

val mValue1 = "value1"lateinit var mValue2: Stringvar mValue3 = "value2"

说明一下大概用法以及跟Java Code是如何对应
基本上如果使用val定义参数,就一定要给予一个数值,并且在宣告之后不能再修改,类似Java final(mValue1)
使用var则可以选择是否要立即给予与数值,如果不马上给值就要加上lateinit告知编译器(mValue2)。或者先设定预设值后续再修改写法如(mValue3)


2. 冒号 :

目前我自己开发时很常碰到的几个地方,没写到的不表示没有喔,后续有碰到会再新增上来

继承(extends)
class MainActivity : AppCompatActivity() {    // 这边的继承是有括号的AppCompatActivity()    // 因为在Java中没有 所以需要特别注意    // 如果是要继承有建构子的class还需要带入参数 后续补充}
实作(implements)
class MainActivity : AppCompatActivity(), View.OnClickListener {    // 同时有继承、实作的写法    // 实作Interface就没有括号了    // 如果要实作多个Interface就继续往后加上 , XXXXXX(Interface name)}
回传值(return)
// 定义回传值为Intoverride fun getItemCount(): Int {    return mData.size}
参数型态
// 定义mValue为Stringlateinit var mValue: String

3. 问号?/双惊叹号!!

有加上问号才能将数值指派为null

var mValue : String? = null

加上双惊叹号表示,我确定在这个时机,textView绝对不为null

var textView : TextView = findViewById(R.id.textView)textView!!.text = "123"

常见组合起来的用法就是类似这样,其实你自己有做好判断,确定在这个时机下绝对不会为null,才会使用!!

fun setValue(textView: TextView?) {    if(textView != null){        textView!!.text = "123"    }    else{        println("textView is null")    }}

4. switch case

比较一下Java/Kotlin写法

// Javapublic void onClick(View view) {    switch (view.getId()){        case R.id.button:            onBackPressed();            break;    }}

比较大的差异是Kotlin字眼是用when并且不需要break

// Kotlinfun onClick(view: View) {    when (view.id) {        R.id.button -> {            onBackPressed()        }    }}

5. 建构子constructor

这边我们综合继承使用
BaseViewModel需要宣告为open才能被继承使用
可以注意到Repository没有指派数值,也没有宣告为lateinit但却不会报错,主要是因为这个值在建构子时已经指派了

open class BaseViewModel : ViewModel {    private var mRepository: Repository        constructor(repo : Repository) {        mRepository = repo    }}// 继承传递建构子参数// 在2.1 AppCompatActivity()有提到括号的部分,其实并不是括号,而是需要传递参数class MainViewModel(repo : Repository) : BaseViewModel(repo) {}

6. object/Singleton

object有几个用法,首先是object class,宣告及呼叫方法如下
object class其实就是Kotlin中Singleton的用法,不清楚Singleton可以到先前这篇文章稍微了解一下

object ApiService {    fun request() {        ...    }}ApiService.request()

接下来是companion object
Kotlin用来定义成static参数或function方式
这边可以看到还有一个叫做const的宣告,const必须放在object中

class Const {    companion object {        const val END_POINT = "https://www.google.com/"                fun getEndPoint() : String{            return END_POINT        }    }}// 呼叫Const.END_POINTConst.getEndPoint()

object介绍完要来讨论一下Singleton,不是说Kotlin Singleton用object class就搞定了吗
基本款是这样没错,但是object class没有办法带参数,这有点遗憾
所以我爬了一些文后有找到一些写法不是用object class完成Kotlin Singleton
大概像这样,这边是比较基础的写法,我看到的还有用到also,后续再做一篇来解释

class Repository {    // 我需要用到的参数 => Context    // 我想在实体化Singleton时带入    private lateinit var mContext : Context    companion object {        @Volatile private var sInstance: Repository? = null        fun getInstance(context: Context): Repository {            if(sInstance == null) {                synchronized(this) {                    sInstance = Repository()                    sInstance!!.mContext = context                }            }            return sInstance!!        }    }}// 呼叫Repository.getInstance(context)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章