Kotlin 開發(fā)Android (三):基本語法

變量

1.常量

val text:String = "hell world!"; 

2.變量

var view:View   = LayoutInflater.from(this).inflate(R.layout.dialog_kotlin,null, false);

3.可為空的變量

var message:String? = "this is a dialog message!";

4.可以不指定類型

var name: String? = null;
var testName = "test"

5.靜態(tài)變量

companion object {
    var sText = "companion text";
}

函數(shù)

1.定義函數(shù)(或方法)

fun onClickTest(view: View) {
}

2.定義帶返回值的函數(shù)

fun onClickTest(view: View) :String {
    return "";
}

3.定義返回值可為空的函數(shù)

fun onClickTest(view: View) :String? {
    return null;
}

Kotlin類文件名為*.kt,一個類可以有(0或1)個主構(gòu)造函數(shù)或多個次構(gòu)造函數(shù)

主構(gòu)造函數(shù):

i.可以將主構(gòu)造函數(shù)中參數(shù)申明成類中成員變量

open class Animal(var nameStr: String) {
        open fun test(){
            val testName = nameStr;
        }
 }

ii.可以不作為成員變量

open class Food(name: String){
        lateinit var mName:String;
        init {
            mName = name;
        }
 }
次構(gòu)造函數(shù):

i.不能將次構(gòu)造函數(shù)中參數(shù)申明成成員變量
如 以下是錯誤的

屏幕快照 2017-04-04 下午2.48.04.png

ii.如果有主構(gòu)造函數(shù)耍休,次構(gòu)造函數(shù)必須要實現(xiàn)主構(gòu)造函數(shù)痹愚,對象構(gòu)造后會調(diào)用init 代碼塊

open class Food(name: String){
        lateinit var mName:String;
        init {
            mName = name;
        }

        constructor(nameStr: String, weight: Int) : this(nameStr) {

        }
 }

iii.子類的要實現(xiàn)父類的主構(gòu)造函數(shù)

   open class Animal(var nameStr: String) {
        open fun test(){
            val testName = nameStr;
        }
    }

    class Duck : Animal("鴨子") {
        override fun toString(): String {
            return "name:"+nameStr;
        }
    }
    

    class Dog(var name: String) : Animal(nameStr = name) {
        override fun test(){
            val testName = nameStr;
            this.name ="";
        }
    }

    class Pig(name: String, weight: Int) : Animal(nameStr = name) {

    }

內(nèi)部類

Kotlin中內(nèi)部類都是靜態(tài)的,如以下內(nèi)部類Food無法調(diào)用外部成員變量parentVar

class KotlinActivity : AppCompatActivity() {
    var parentVar:String = "parent var";
    
    open class Food(name: String){
        lateinit var mName:String;
        init {
            mName = name;
            mName = parentVar;
            mName = KotlinActivity().parentVar;
        }

        constructor(nameStr: String, weight: Int) : this(nameStr) {

        }
    }
}

非靜態(tài)內(nèi)部類,需要用inner標示赖草,如下:


class GameActivity : Activity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_game)

        start.setOnClickListener { gameView.start() }
    }

    fun onScoreChanged(scoreValue: Int) {
        score.text = scoreValue.toString()
    }

    override fun onPause() {
        super.onPause()
    }

    inner class Test{
        fun init(){
            var context = this@GameActivity.applicationContext;
        }
    }
}

接口

package com.ifnoif.game2048

import android.app.Activity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_game.*
import java.io.File
import java.io.FileFilter

/**
 * Created by shen on 17/4/11.
 */

class GameActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_game)

        start.setOnClickListener { gameView.start() }
    }

    fun onScoreChanged(scoreValue: Int) {
        score.text = scoreValue.toString()
    }

    override fun onPause() {
        super.onPause()
    }

    inner class Test{
        fun init(){
            var context = this@GameActivity.applicationContext;

            var fileFilter: FileFilter = FileFilter { pathname: File -> var end = ".java"; pathname.absolutePath.endsWith(end) }

            //實現(xiàn)kotlin中的接口滴某,不能整成上面那種匿名內(nèi)部類的方式,需采用下面的方法
            var operation: Operation = object:Operation {
                override fun add(a: Int, b: Int): Int {
                    return a+b
                }
            }

            //kotlin中的抽象類也不能生成匿名內(nèi)部類
            var add: Operation = object:Add() {
                override fun add(a: Int, b: Int): Int {
                    return a+b
                }
            }
        }
    }

    //抽象類
    abstract class Add(): Operation{

    }

    //定義接口interface
    open interface Operation {
        fun add(a: Int, b: Int): Int;
    }
}

還可以使用typealias(聲明函數(shù)類型別名)

typealias Operate<T> = (a:T,b:T) -> T
fun init() {
    var operate: (Int, Int) -> Int = { a:Int, b:Int ->a+b}
    operate.invoke(1,2)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末站宗,一起剝皮案震驚了整個濱河市闸准,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梢灭,老刑警劉巖夷家,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敏释,居然都是意外死亡库快,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門颂暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缺谴,“玉大人,你說我怎么就攤上這事∈祝” “怎么了膀曾?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阳啥。 經(jīng)常有香客問我添谊,道長察迟,這世上最難降的妖魔是什么斩狱? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮扎瓶,結(jié)果婚禮上所踊,老公的妹妹穿的比我還像新娘。我一直安慰自己概荷,他們只是感情好秕岛,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著误证,像睡著了一般继薛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愈捅,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天遏考,我揣著相機與錄音,去河邊找鬼蓝谨。 笑死灌具,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的像棘。 我是一名探鬼主播稽亏,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缕题!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胖腾,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤烟零,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咸作,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锨阿,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年记罚,在試婚紗的時候發(fā)現(xiàn)自己被綠了墅诡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡桐智,死狀恐怖末早,靈堂內(nèi)的尸體忽然破棺而出烟馅,到底是詐尸還是另有隱情,我是刑警寧澤然磷,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布郑趁,位于F島的核電站,受9級特大地震影響姿搜,放射性物質(zhì)發(fā)生泄漏寡润。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一舅柜、第九天 我趴在偏房一處隱蔽的房頂上張望梭纹。 院中可真熱鬧,春花似錦致份、人聲如沸变抽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞬沦。三九已至,卻和暖如春雇锡,著一層夾襖步出監(jiān)牢的瞬間逛钻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工锰提, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曙痘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓立肘,卻偏偏與公主長得像边坤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谅年,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容